2017-04-05 22 views
0

我收到以下錯誤我得到的ObjectContext的實例已經配置,即使什麼也沒有佈置

的ObjectContext的實例已設置,並且不能再被用於需要一個操作連接。

但我不明白爲什麼框架拋出這個錯誤。這是代碼。

var bookmark = type.ToLower() == "bookmark" 
    ? db.Bookmarks.First(u => u.BookmarkID == id) 
    : db.Users.First(u => u.UserID == id).Videos.FirstOrDefault(a => a.Recording)?.Bookmarks.OrderBy(b => b.Timestamp).FirstOrDefault(); 
if (bookmark != null) 
{ 
    var meta = bookmark.relBookmarkMetadatas.Select(a => new 
    { 
     Value = 
     FormatValue(a.Value, a.MetadataDefinition.MetadataType.ObjectType, a.MetadataDefinition.MetadataType.FormatString), 
     a.MetadataDefinition.MetadataClass.Class, 
     a.MetadataDefinition.Name, 
     a.MetadataDefinition.MetadataType.ObjectType, 
     a.MetadataDefinition.MetadataType.FormatString 
    }); 
    return Json(meta, JsonRequestBehavior.AllowGet); 
} 

爲什麼我得到這個錯誤?

的錯誤是在

var meta = bookmark.relBookmarkMetadatas.Select(a => new 
+1

在哪一行中得到錯誤? – Zalomon

+0

默認情況下,Enitity框架使用延遲加載..延遲相關數據的加載,直到您明確請求它......也許嘗試使用'.Include()'方法加載加載......但它會很高興知道您收到錯誤的哪一行。 –

回答

1

你傳遞一個懶洋洋地加載的EntityFramework ICollectionJson(..)方法。在響應被序列化的時候,EntityFramework上下文將被處置。

.ToList()添加到您的ICollection/IQueryable/IEnumerable的末尾,然後再通過它。

return Json(meta.ToList(), JsonRequestBehavior.AllowGet); 
+0

非常感謝你,出於某種原因,我需要.ToList()的WHERE轉義我 – devzero

+0

@devzero沒問題:)一般來說,儘可能晚的鏈,但你通常需要一個。瞭解EF可以將哪些東西卸載到數據庫以及哪些東西只能在內存中完成,這將非常有趣。 (...)。ToList()'與_db.People.ToList()不同的地方在哪裏(...)。ToList()'! –

相關問題