2017-01-23 78 views
1

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

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) 

与方法的问题上面我无法用。凡子句来过滤包括集合。

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

除了: Entity Framework Query multiple collections

两者都不能够以一个请求被被拉断,所以我猜它不可能?

+0

如果你想在一次往返中过滤相关的实体,那么你将需要预计你的查询的预期结果 – octavioccl

+2

实际上使用一个单独的SQL(db trip)来返回多个子集合,如'Include'示例比单独使用往返效率要低得多,因为返回的结果集必须是所有具有联合字段的子记录(大多数为“null”)的笛卡尔乘积。所以,即使你能以某种方式工作,也不要这样做。 –

+0

@octavioccl你能详细说明一下吗? –

回答

0

EF在其基础上不支持该功能。

你可以把它拆分成3个独立的查询和使用一些外部库做单往返,例如以后查询的EntityFramework.Extended的NuGet库。

相关问题