2012-04-18 94 views
0

我正在使用實體框架4.1,我有一對多的關係。實體框架和延遲加載的ICollection執行

當我查詢懶返回整個記錄的關係的一個側面加載ICollection<T>,它不會推遲執行,當我查詢直接從系統信息庫IQueryable接口等。

有什麼辦法讓這個使用延遲執行,所以我可以事先做一個查詢像

Model.Childs.Where(x => !x.Deleted.HasValue).Skip(10).Take(5); 

感謝,

湯姆。

回答

0

這是EF中延遲加載的原理。您的導航屬性是在您的代碼中定義的,並且在該屬性上定義的任何LINQ查詢都是LINQ-to-Objects - 它不會被轉換爲SQL。延遲加載始終加載整個集合(以及加載)。當你查詢你的存儲庫時,你正在查詢IQueryable並使用被轉換爲SQL的LINQ-to-Entities。

至於解決方法使用顯式加載:

dbContext.Entry(Model).Collection(m => m.Childs) 
         .Query() 
         .Where(c => !c.Deleted.HasValue) 
         .Skip(10) 
         .Take(5) 
         .Load();