Частичное отображение в Entity Framework 4 - PullRequest
1 голос
/ 20 апреля 2010

Я хочу иметь возможность сделать следующее:

У меня есть модель, и внутри у меня есть сущность.

Эта сущность имеет следующую структуру:

public class Client
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
}   

Что я хочу сейчас, это просто получить имя клиента на основе идентификатора. Поэтому я написал хранимую процедуру, которая делает это.

CREATE PROCEDURE [Client].[GetBasics]
@Id INT
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;


SELECT 
    Name
FROM Client.Client
INNER JOIN Client.Validity ON ClientId = Client.Id
WHERE
    Client.Id = @Id; 
 END

Теперь, возвращаясь к VS, я обновляю модель из базы данных с включенной хранимой процедурой.

Следующий шаг - сопоставить эту хранимую процедуру с клиентской сущностью как функцией импорта.

Это тоже отлично работает.

Попытка загрузить имя одного клиента приводит к ошибке во время выполнения ...

"Считыватель данных несовместим с указанный CSTestModel.Client. член типа «Id» не иметь соответствующий столбец в считыватель данных с тем же именем. "

Я в порядке с сообщением. Я знаю, как это исправить (возвращая в качестве результирующего набора Id, Name, Description).

Моя идея заключается в следующем:

Я просто хочу загрузить части объекта, а не сам объект. У меня есть ограничение - использовать хранимые процедуры для всего обмена данными с базой данных.

Есть ли решение моей проблемы (кроме создания сложных типов, LINQ для самого набора результатов)? И если да, может ли кто-нибудь указать мне правильное направление?

Большое спасибо,

Dimi

1 Ответ

1 голос
/ 20 апреля 2010

Просто спроецируйте на POCO:

var q = from c in Context.Clients
        select new NameOnlyPresentation
                   {
                       Id = c.Id,
                       Name = c.Name
                   };

... или просто имя:

public string ClientName(int id)
{
    return (from c in Context.Clients
            where c.Id == id
            select c.Name).FirstOrDefault();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...