Лучшие практики для извлечения данных с использованием Entity Framework 4.0 - PullRequest
3 голосов
/ 13 июля 2010

Я пытаюсь понять некоторые фундаментальные передовые практики, используя Entity Framework.

В моем проекте EDM есть объекты Group и User, которые могут содержать группа и другие пользователи.

Вопрос в том,:

Каков наилучший способ извлечения пользователей из группы?

Чтобы упростить получение групп, достаточно просто создать объект контекста и создать список из таблицы групп.

Но когда я хочу увидеть пользователей внутри группы, контекст закрывается (как и должно быть).

Я думал о двух подходах:

1) отправка группы обратно, присоединяя его к контексту и используя метод Load () для пользователей и возвращая список пользователей.

Здесь я не знаю, когда присоединять, а когда нет, а когда EDM будет расти.Придется многое сделать взад и вперед для каждой ссылки, чтобы загрузить

2) запрос linq со стороны пользователя.
от u в context.Users, где u.Groups.Contains (group) выберите u

Здесь я получаю еxception, что только примитивные типы могут использоваться.

Так каков правильный способ сделать это?

Спасибо, Ронни

Ответы [ 2 ]

3 голосов
/ 13 июля 2010

Не совсем ясно, есть ли у вас отношения «один ко многим» или «многие ко многим» между вашими пользователями и группами.Согласно описанию вверху, a group may contain users - это один ко многим.Согласно вашему коду: from u in context.Users where u.Groups.Contains(group) select u - это много ко многим.Таким образом, я предоставлю образцы для обоих случаев.

Один ко многим - группа содержит несколько пользователей, пользователь может принадлежать только одной группе:

context.Users.Where(u => u.Group.Id == group.Id);

От многих ко многим - группа содержит несколько пользователей, пользователь может принадлежать нескольким группам:

context.Users.Where(u => u.Groups.Any(g => g.Id == group.Id));
0 голосов
/ 13 июля 2010
context.Users.Select(u => u).Where(e => e.Groups.Contains(group))

Это работает?

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