使用Entity Framework 4.0检索数据的最佳实践

3
我正在尝试理解一些使用Entity Framework的基本最佳实践。
我的EDM设计有Group和User实体,其中Group可能包含用户和其他组。
问题是:
从组中检索用户的最佳方法是什么?
要获取组很容易,只需创建上下文对象并从组表中创建列表即可。
但是当我想要查看组内的用户时,上下文已关闭(应该关闭)。
我考虑了两种方法:
1)将组返回,将其附加到上下文并在Users上使用Load()方法返回用户列表。
在这里,我不知道何时应该附加以及何时不应该附加,当EDM增长时,我将不得不为每个引用来回进行大量操作以加载。
2)来自用户端的linq查询。 从u in context.Users where u.Groups.Contains(group) select u
在这里,我遇到了一个只能使用基元类型的异常。
那么正确的做法是什么?
谢谢 Ronny
2个回答

3

目前不太清楚您的用户和群组之间是一对多还是多对多关系。根据上面的描述,一个群组可以包含多个用户,这是一对多的关系。根据您的代码: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
context.Users.Select(u => u).Where(e => e.Groups.Contains(group))

这个可以吗?


抱歉,相同的异常: 无法创建类型为“EDM.Data.Group”的常量值。在此上下文中,仅支持基元类型(例如Int32、String和Guid)。 - Ronny

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接