LINQ w / Entity Framework - заполнение объектов - PullRequest
1 голос
/ 31 июля 2011

Я не уверен, возможно ли это с Entity Framework, но я дублирую слишком много объектов, заполняющих код.

В настоящее время мои методы делают что-то вроде:

return (from s in context.some_table
    join u in context.user_table on s.user_id equals u.id
    where s.id == someId
    select new MyObject()
    {
        TableColumn = s.some_column,
        User = new MyUser()
        {
            Username = u.username,
            Id = u.id,
        }
    }.FirstOrDefault();

Iпросто напечатал это в качестве примера.У меня много запросов, где я включаю информацию о пользователе (больше, чем просто в этом примере).Таким образом, во все мои запросы я помещаю один и тот же кусок кода. Если у меня есть 100 методов с этим фрагментом кода, и я хочу добавить еще один возвращаемый столбец, то мне нужно обновить 100 методов.Боль в заднице.

Я бы хотел, чтобы объект User был заполнен методом многократного использования.Таким образом, добавление / удаление возвращаемых столбцов необходимо изменить только в одном месте.Например:

return (from s in context.some_table
    join u in context.user_table on s.user_id equals u.id
    where s.id = someId
    select new MyObject()
    {
        TableColumn = s.some_column,
        User = FillUser(u)
    }.FirstOrDefault();

FillUser будет методом.Конечно, это не работает с Entity Framework.

Могу ли я что-нибудь сделать вообще?Я, конечно, мог бы вернуть всю пользовательскую таблицу, но это намного больше информации, чем мне нужно, так что это пустая трата.

Я использую .NET 4.0, если это помогает.

1 Ответ

2 голосов
/ 31 июля 2011

Entity Framework - это инструмент ORM, поэтому его основная цель - определить отображение из базы данных в объекты и загрузить объекты на основе этого отображения.Очевидно, что если вам требуется 100-кратное проецирование пользователя, это сценарий для отображения сопоставленной базы данных, пользовательского определяющего запроса или пользовательского представления запроса .Вы злоупотребляете проекциями вместо создания многоразового отображения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...