【问题标题】:Best Practice for retrieving data using Entity Framework 4.0使用 Entity Framework 4.0 检索数据的最佳实践
【发布时间】:2010-07-12 21:02:04
【问题描述】:

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

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

问题是:

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

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

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

我想到了两种方法:

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

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

2) 来自用户端的 linq 查询。
from u in context.Users where u.Groups.Contains(group) select u

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

那么正确的做法是什么?

谢谢 罗尼

【问题讨论】:

    标签: c# linq entity-framework


    【解决方案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));
    

    【讨论】:

      【解决方案2】:
      context.Users.Select(u => u).Where(e => e.Groups.Contains(group))
      

      这行得通吗?

      【讨论】:

      • 抱歉,同样的异常:无法创建“EDM.Data.Group”类型的常量值。此上下文仅支持原始类型(“例如 Int32、String 和 Guid”)。
      猜你喜欢
      • 2022-01-11
      • 1970-01-01
      • 1970-01-01
      • 2013-11-03
      • 1970-01-01
      • 1970-01-01
      • 2018-12-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多