2010-06-21 97 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深入讨论。