我正在尝试使用Entity Framework了解一些基本的最佳实践。
我的EDM设计包含组和用户实体,该组可能包含用户和其他组。
问题是:
从群组中检索用户的最佳方法是什么?
为了简化组,只需创建上下文对象并从groups表中创建列表。
但是当我想要查看组内的用户时,上下文将被关闭(应该是这样)。
我想到了两种方法:
1)将组发回,将其附加到上下文并使用Users上的Load()方法并返回用户列表。
在这里,我不知道何时连接,当我不应该,当EDM增长时,我将不得不为每个加载来回做很多次
2)来自用户方的linq查询 来自u的context.Users,其中u.Groups.Contains(group)选择你
这里我得到的例外是只能使用基本类型。
那么这样做的正确方法是什么?
由于 罗尼
答案 0 :(得分:3)
您的用户和群组之间是否存在1对多或多对多的关系尚不十分清楚。根据前面的描述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));
答案 1 :(得分:0)
context.Users.Select(u => u).Where(e => e.Groups.Contains(group))
这有用吗?