我想知道DataContext如何處理併發衝突。DataContext如何處理併發性?
例如 -
兩個用戶從數據庫中獲取一些數據,那麼他們中的一些改變一些行並提交更改,然後其他用戶試圖提交他們的變化,使一個ChangeConflictException
應該發生,但如何的DataContext知道數據已經改變?
再次獲取此數據並進行比較?或者一些數據庫通知機制?
我想知道DataContext如何處理併發衝突。DataContext如何處理併發性?
例如 -
兩個用戶從數據庫中獲取一些數據,那麼他們中的一些改變一些行並提交更改,然後其他用戶試圖提交他們的變化,使一個ChangeConflictException
應該發生,但如何的DataContext知道數據已經改變?
再次獲取此數據並進行比較?或者一些數據庫通知機制?
併發控制可以通過使用數據庫中的TimeStamp列或LINQ-to-SQL中的UpdateCheck屬性來完成。
未被改變,並標UpdateCheck的所有列的以前的值被包含在生成的更新語句的where子句。如果更新影響了1行,一切都很好 - 如果它影響了0行(例如,其他人更改了其中一個值,因此在篩選後找不到該行),您將收到ChangeConflictException。
是的,它再次提取數據以驗證併發性。
LINQ to SQL採用樂觀併發控制,這意味着L2S檢查數據的狀態而不是鎖定數據。您可以指定L2S應使用哪一列來確定數據是否更改。默認情況下,它會比較每一列。