我有EF,數據庫第一。我有三個模型類:A
,B
和C
。 模型A
與B
和B
具有m2m關係,與C
具有m2m關係。奇怪的EF行爲 - 意外的長時間
我在此列出A
的子集以及相關的B
和C
。
在測試環境中,子集中有大約20個模型A
,只有少數具有任何相關的B
,如果有,它在大多數情況下只是一個。
型號B
總是隻有一個相關的C
。我不想改變它,因爲將來會有更多C
與一個B
相關。
我的第一種方法是:
var listA = new Entities(...).As.Where(...).ToList();
foreach (var objA in listA){
var listC = objA.Bs.ToList().Select(b => b.FirstOrDefault(c => ...)).ToList();
}
花了約164ms - 相當長。
所以我想優化它。
如您所見,第一行IQueryable<A>
更改爲List<A>
。 在這一刻,我認爲,查詢被執行。
當我想得到Bs
爲A
和C
爲B
,我認爲,執行其他查詢。
然後我搜索並找到了Include
方法。在第二個Approuch中,我使用它:
var listA = new Entities(...).As.Include("Bs.Cs").Where(...).ToList();
foreach (var objA in listA){
var listC = objA.Bs.ToList().Select(b => b.FirstOrDefault(c => ...)).ToList();
}
在我看來,執行應該花費大約10ms,但現在花費550ms。
當我剛剛掛牌As
有關的Bs
和Cs
它需要約10ms。
我在做什麼錯?
編輯:對不起,C有FK到B.但我不認爲它會改變任何東西。
你真的應該調查發射的sql的任何意外的查詢。 –