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()然後枚舉它將加載所有相關的外鍵對象,那麼爲什麼不是深度加載所有圖書到用戶的方法呢?我錯過了什麼?
(我想深負載該對象,並在其中的數據被頻繁使用的緩存了一段時間)
這是正確的。此外,我想建議不要返回列表,然後在內存中過濾,但要有一個新的方法,用一個SQL查詢完成整個事情。 – ivowiblo
謝謝!這正是我想要它做的!只是讓你知道:似乎我只能做.Include()。Where()而不是.Where().include()。 – jeremy