【问题标题】:Entity Framework load multiple collections in one request实体框架在一个请求中加载多个集合
【发布时间】:2017-01-23 19:18:17
【问题描述】:

基本上,我正在寻找在一个请求中获取实体的关联集合的最简单方法。

using (var context = new DbContext())
 {
   context.Users.Attach(user);
   context.Entry(user)
   .Collection(f => f.Followers)
   .Query()
   .Where(x => x.Whatever)
   //.Collection(r => r.Requests) doesn't work
   //.Collection(b => b.Blocks) doesn't work
   .Load();
 }

我知道我可以将这些请求分成 3 个不同的请求,但我只想要一次访问数据库。

另外,我能够做到这一点:

var user = context.Users
           .Include(f => f.Followers)
           .Include(r => r.Requests)

上述方法的问题是我无法使用 .Where 子句过滤包含中的集合。

这个问题非常多: EF 6 filtering child collections

还有: Entity Framework Query multiple collections

一个请求都无法完成,所以我猜这不可能?

【问题讨论】:

  • 如果您想在一次往返中过滤相关实体,那么您需要将查询投影到预期结果
  • 实际上像Include示例中那样使用单个SQL(db trip)返回多个子集合比使用单独的往返效率低得多,因为返回的结果集必须是所有的笛卡尔积带有联合字段的子记录(其中大部分是null)。因此,即使您可以使其以某种方式发挥作用,也不要那样做。
  • @octavioccl 你能详细说明一下吗?

标签: c# asp.net entity-framework linq


【解决方案1】:

其基础中的 EF 不支持。

您可以将其拆分为 3 个单独的查询,并使用一些外部库在单次往返中完成,例如 EntityFramework.Extended nuget 库的 Future Queries

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-11
    • 2011-10-20
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    相关资源
    最近更新 更多