我有一個視圖ObjectDisplay
,它由兩個相關的表格組成:Object
和State
。 State
代表Object
的狀態,並且該視圖從最近的State
中爲每個Object
提取一些細節。視圖是否立即反映其基礎表中的數據更改?
在顯示此信息的頁面上,用戶可以輸入一些註釋,它會創建一個新的State
。在創建新的State
後,我立即從ObjectDisplay
中取出Object
,然後將其發回並放入局部視圖中,並替換頁面上的網格中的Object
。
// Add new State.
db.States.Add(new State()
{
ObjectId = objectId,
Comments = comments,
UserName = username
});
// Save the changes (executes all of the above).
db.SaveChanges();
// Return the new Object information.
return db.Objects.Single(c => c.ObjectId == objectId);
根據我的分貝跟蹤,該Single
呼叫發生SaveChanges
呼叫後約70毫秒,它發生在同一個SPID。
現在是問題:數據庫默認我看到返回的RecordDate
的值在State
到GETUTCDATE()
- 我自己沒有提供日期。我看到的是Object
返回的舊State
的State
的RecordDate
和舊的State
的新State
信息的Comments
。Object
有舊的State
的信息。當我刷新頁面時,所有正確的信息都在那裏,但是在數據庫/ EF的初始調用中返回了錯誤的信息。
那麼..什麼可能是錯的?該視圖能否更新得足夠快? EF可能會發生什麼?我真的不知道從哪裏開始尋找。
什麼隔離級別的查詢與運行?是否在不同的會話上調用視圖來更改數據? – Oded 2013-03-21 21:01:58
@Oded:從跟蹤中,'Audit Login'行有'set transaction isolation level read committed'。兩者都在同一個SPID中完成。 – zimdanen 2013-03-21 21:03:56