DataContext如何处理并发?

时间:2010-06-21 09:58:36

标签: sql-server linq-to-sql

我想知道DataContext如何处理并发冲突。

例如 -

两个用户从数据库中获取一些数据,然后其中一些用户更改了一些行和提交更改,然后其他用户尝试提交他们的更改,因此应该发生ChangeConflictException,但DataContext如何知道数据已经改变?

再次获取此数据并进行比较?还是一些数据库通知机制?

3 个答案:

答案 0 :(得分:0)

可以使用数据库中的TimeStamp列或LINQ-to-SQL中的UpdateCheck属性来完成并发控制。

MSDN Concurrency Overview (LINQ-to-SQL)

MSDN How to manage change conflicts (LINQ-to-SQL)

答案 1 :(得分:0)

所有未更改且标记为UpdateCheck的列的先前值都包含在生成的更新语句的where子句中。如果更新影响了1行,那么一切都很好 - 如果它影响0行(例如,其他人改变了其中一个值,因此在过滤后无法找到该行),则会得到ChangeConflictException。

答案 2 :(得分:0)

是的,它再次获取数据以验证并发性。

LINQ to SQL采用乐观并发控制,这意味着L2S检查数据的状态而不是锁定数据。您可以指定L2S应使用哪个列来确定数据是否已更改。默认情况下,它会比较每一列。

请参阅Understanding LINQ to SQL (9) Concurrent Conflict进行深入讨论。