2017-01-23 56 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庫。

相關問題