2012-03-25 114 views
-1

我有方法的代碼:淨實體框架ObjectContext的錯誤

using (var cc = new MyDBContext()) 
      { 
       var myList = (from user in cc.Users 
            where user.UserGroup.Name == "smth" 
            orderby user.ID ascending 
            select user); 

       if (startIndex != null) 
        return View(myList.Skip((int)startIndex).Take(50)); 
       else 
        return View(myList); 
      } 

鑑於我趕例外的ObjectContext的實例已被設置,並且不再能夠用於需要連接的操作。

有些人說.ToList()必須解決問題,但它也會拋出myList.ToList()異常。我的問題是什麼?

P.S.在調試模式下,我在@ item.FullName的視圖中有異常,但是如果將鼠標移動到FullName屬性上,我可以看到正確的值。

對不起,我的英語不好。

+1

可能重複一百萬... http://stackoverflow.com/search?q=ObjectContext+Disposed+%5Basp-net-mvc%5D – 2012-03-25 16:46:59

+0

他們建議刪除使用語句,但在另一篇文章中人們說我總是應該關閉dbcontext對象。 – Dmitriy 2012-03-25 16:50:43

回答

1

問題出在用戶實體的延遲加載子屬性。我添加到鏈接語句包括(「PropName」),它的效果很好。

1

完全在「使用」塊之外執行「返回View()」語句。這將確保您在處理DbContext對象之前檢索完整的數據集。就像這樣:

using (var cc = new MyDBContext()) 
{ 
    var myList = (linq).ToList(); 
} 
return View(myList); 

我敢肯定,問題是,你是返回一個IEnumerable來查看,這意味着該項目沒有實際尚未檢索。但是,當您將對象返回到您的視圖時,DbContext將在視圖有機會檢索行之前進行處理。

+0

比我有同樣的錯誤返回查看(teacherList.ToList()); – Dmitriy 2012-03-25 16:47:35

+0

已更新上面。我的意思是說,還包括「使用」塊內的ToList()。 – McGarnagle 2012-03-25 16:52:07

+0

當我移動返回查看(myList);在使用語句之外,如你所說(在使用語句中,我寫了(linq語句).ToList();)我在視圖@ item.FullName :(。 – Dmitriy 2012-03-25 16:55:16