【发布时间】: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