2010-06-21 37 views
2

我想知道DataContext如何處理併發衝突。DataContext如何處理併發性?

例如 -

兩個用戶從數據庫中獲取一些數據,那麼他們中的一些改變一些行並提交更改,然後其他用戶試圖提交他們的變化,使一個ChangeConflictException應該發生,但如何的DataContext知道數據已經改變?

再次獲取此數據並進行比較?或者一些數據庫通知機制?

回答

0

未被改變,並標UpdateCheck的所有列的以前的值被包含在生成的更新語句的where子句。如果更新影響了1行,一切都很好 - 如果它影響了0行(例如,其他人更改了其中一個值,因此在篩選後找不到該行),您將收到ChangeConflictException。

0

是的,它再次提取數據以驗證併發性。

LINQ to SQL採用樂觀併發控制,這意味着L2S檢查數據的狀態而不是鎖定數據。您可以指定L2S應使用哪一列來確定數據是否更改。默認情況下,它會比較每一列。

請參閱Understanding LINQ to SQL (9) Concurrent Conflict深入討論。