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

时间:2010-07-12 21:02:05

标签: c# linq entity-framework

我正在尝试使用Entity Framework了解一些基本的最佳实践。

我的EDM设计包含组和用户实体,该组可能包含用户和其他组。

问题是:

从群组中检索用户的最佳方法是什么?

为了简化组,只需创建上下文对象并从groups表中创建列表。

但是当我想要查看组内的用户时,上下文将被关闭(应该是这样)。

我想到了两种方法:

1)将组发回,将其附加到上下文并使用Users上的Load()方法并返回用户列表。

在这里,我不知道何时连接,当我不应该,当EDM增长时,我将不得不为每个加载来回做很多次

2)来自用户方的linq查询     来自u的context.Users,其中u.Groups.Contains(group)选择你

这里我得到的例外是只能使用基本类型。

那么这样做的正确方法是什么?

由于 罗尼

2 个答案:

答案 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))

这有用吗?