我正在使用實體框架5.0和SQLite數據庫。我有一個場景,我對數據庫記錄進行了修改,然後使用同一個表的實體對象的新實例來讀取相同的記錄,但是我得到了舊的值。在調試的時候,如果我去我的數據庫工具並查看記錄,這些變化就在那裏,但是EF並沒有選擇它們。它會在晚些時候拿起它們,但我無法確定它是什麼時候。實體框架在SaveChanges獲取舊值後讀取
以下是代碼片段。首先,我執行使用更新的SaveChanges():
tblTest efTestTbl = context.tblTests.Find(recID);
context.tblTests.Attach(efTestTbl);
efTestTbl.Value1 = "newValue"; // This changed it from "oldValue" :-)
int changedRecs = context.SaveChanges();
這上面的代碼似乎總是工作並保存更改數據庫。 changedRecs最終等於1.我可以在代碼中的這一點之後休息,並使用我的數據庫工具查看數據庫中的值,並且該列將等於「newValue」。
現在,如果我執行下面的讀,用不同的表對象上一次更新後直接,但相同的實例的上下文對象:
tblTest efTestTbl = context.tblTests.Find(recID);
在efTestTbl.Value1的價值將等於「屬性oldValue」 。我看到一些關於EF沒有緩存任何東西的評論,但我不能相信這是真的。在另一個論壇上,我看到一場談話談論關於ObjectQuery的MergeOption,緩存被稱爲「身份解析」。這是內容豐富的,但沒有幫助我,因爲我沒有使用查詢和「ExecuteNonQuery()」方法。
我的方案需要我寫出一個更改,然後從數據庫讀取並記錄更改作爲驗證步驟。
任何幫助,你可以給我找到一種方法來刷新緩存將不勝感激。
在代碼中使用相同的上下文實例嗎? –