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

标签 c# linq entity-framework

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

我的 EDM 设计有 Group 和 User 实体,其中 Group 可能包含用户和其他组。

问题是:

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

为了让组变得简单,只需创建上下文对象并从组表中创建一个列表。

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

我想到了两种方法:

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

在这里,我不知道什么时候附加,什么时候不应该附加,以及 EDM 什么时候增长,我将不得不为每个加载引用来回做很多事情

2) 用户端的linq查询。
从你在 context.Users where u.Groups.Contains(group) 选择你

这里我得到一个异常,只能使用原始类型。

那么正确的做法是什么?

谢谢 罗尼

最佳答案

不太清楚您的用户和组之间是一对多还是多对多关系。根据上面的描述,一个组可能包含用户 - 它是一对多的。根据您的代码: 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));

关于c# - 使用 Entity Framework 4.0 检索数据的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3232249/

相关文章:

c# - 查找列表是否包含任何不在列表中的元素

c# - Entity Framework Linq、Left Join 和 Group with SUM 和 Count

c# - 从插件访问 C# 中的第三方命名空间

c# - 处理 XML 更改的好方法

c# - LINQ 加入 : Object reference not set to an instance of an object

c# - 当实体是内部时,延迟加载不起作用

c# - Linq DELETE 在 SQL Server 中生成 UPDATE 查询

c# - 如何将此方法作为扩展方法添加到我的类的属性中?

c# - 如何在 C# 中使用 1 Console.Writeline() 编写两个字符串及其两个变量值

c# - 在运行时更改资源的提取位置?