在我的web應用程序中,我們使用每個請求DbContext。我們在Application_BeginRequest()中創建DbContext,將其存儲在HttpContext.Items中,然後在Application_EndRequest()中對其調用Dispose。實體框架是否將其DbContext與高速緩存的查詢計劃一起存儲?
我們通過包裝類DatabaseContext.Current屬性使當前上下文可用。
偶爾,針對該數據庫上下文中執行查詢時,我們得到以下異常:
「的ObjectContext的實例已經設置,不能再用於需要連接的操作」。
我搜索了我們的代碼,發現我們正在調用的任何可能性在其他地方的上下文....我們不是。
是常見故障查詢是這一個:
var user = (from u in DatabaseContext.Current.Users
where u.UserName == username
select u).FirstOrDefault();
return user != null;
所有我能想到的是深藏在它是保持在一個緩存查詢計劃到的DbContext的引用,然後試圖將EF的腸子是在執行查詢時重用該上下文。我已經通過反射器查看了它,它似乎確實有一些內部參考了ObjectContext。
有沒有辦法可以禁用linq查詢緩存?任何人有任何線索?
另一種可能性是來自Context上一次調用的查詢正在使Context處於不良狀態。但是,沒有任何跡象表明這會失敗。
這是使用Sql CE的Entity Framework 4.1(現在,我們很快將遷移到生產SQL Server實例)。
有時候在你明顯突然跳出來之前,你必須打幾次頭。謝謝你的答案。由於我的上下文包裝中存在一個錯誤,你的第一個項目符合原因。 –