2011-01-10 141 views
8
using(DataContext db = new DataContext()) 
{ 
    var result = db.SomeTable.ToList(); 
    return result; 
} 

問題是我已經返回結果後,連接關閉,因爲它關閉,它崩潰時,我試圖訪問任何子元素。發生這種情況是因爲延遲加載設置爲True(默認),它在使用之前從不加載子關係,並且在連接關閉後開始使用它們。那麼解決這個問題的最好方法是什麼?實體框架懶加載

我試圖關閉延遲加載,但它沒有加載任何的子關係表。

回答

14

你總是可以顯式地加載你的孩子集合:

var result = db.SomeTable.Include("SomeChildCollectionName") 
         .Include("AnotherChildCollectionName") 
         .ToList(); 
+0

好了,但如果我想加載所有子元素,而不必明確寫有(「的ElementName」)是什麼?有很多子元素,那就是爲什麼 – syncis 2011-01-10 14:49:31

3

您可以使用.include()方法。

var result = db.SomeTable.Include("ChildEntitySet").ToList(); 

您還可以在返回之前添加result.ChildEntitySet.Load()呼叫。這效率不高,因爲它會導致兩次到達服務器。使用.Include()方法將生成一個帶有JOIN的SQL語句,只允許一次訪問服務器。

+1

好了,但如果我想加載所有子元素,而不必明確寫有(「的ElementName」)是什麼?有很多子元素,這就是爲什麼 – syncis 2011-01-10 14:49:11