1

我試圖深度加載一個EF對象並將其保存在緩存中一段時間​​。就我而言,我有一個對象(比如用戶),然後設置爲虛擬館藏圖書的內部列表ObjectDisposed異常:我在MVC 3 EF深度加載中做錯了什麼?

public virtual ICollection<Books> ListOfBooks { get; set; } 

哪裏有圖書和用戶(和它的所有工作正常)

之間的外鍵關係

我想深負載這在靜態中心類

public static List<User> LoadAllBooksAndUsers() { 

    using (MyDB dc = new MyDB()) 
    { 

     dc.Users.Include("ListOfBooks"); 
     List<User> a = dc.Users.Where(l => l.Status == 1).ToList(); 

     return a;    
    } 
} 

在我的呼喚的代碼,我有這樣的事情:

var evx = DB.LoadAllBooksAndUsers(); 
var q = evx.Single(m=>m.name==name); 

在調試器或q.ListOfBooks中檢查evx顯示listOfBooks有一個對象處置異常並且它爲空。

這是隨機的 - 它似乎有一段時間工作,我不知道在什麼情況下。我的理解是使用.Include()然後枚舉它將加載所有相關的外鍵對象,那麼爲什麼不是深度加載所有圖書到用戶的方法呢?我錯過了什麼?

(我想深負載該對象,並在其中的數據被頻繁使用的緩存了一段時間)

回答

3

您正在使用Include錯誤。您需要連同查詢建築本身不使用它:

List<User> a = dc.Users.Include("ListOfBooks") 
         .Where(l => l.Status == 1)       
         .ToList(); 

您可以找到有關預先加載更多信息in this article

+0

這是正確的。此外,我想建議不要返回列表,然後在內存中過濾,但要有一個新的方法,用一個SQL查詢完成整個事情。 – ivowiblo

+0

謝謝!這正是我想要它做的!只是讓你知道:似乎我只能做.Include()。Where()而不是.Where().include()。 – jeremy

相關問題