我想知道DataContext如何处理并发冲突。DataContext如何处理并发性?
例如 -
两个用户从数据库中获取一些数据,那么他们中的一些改变一些行并提交更改,然后其他用户试图提交他们的变化,使一个ChangeConflictException
应该发生,但如何的DataContext知道数据已经改变?
再次获取此数据并进行比较?或者一些数据库通知机制?
我想知道DataContext如何处理并发冲突。DataContext如何处理并发性?
例如 -
两个用户从数据库中获取一些数据,那么他们中的一些改变一些行并提交更改,然后其他用户试图提交他们的变化,使一个ChangeConflictException
应该发生,但如何的DataContext知道数据已经改变?
再次获取此数据并进行比较?或者一些数据库通知机制?
并发控制可以通过使用数据库中的TimeStamp列或LINQ-to-SQL中的UpdateCheck属性来完成。
未被改变,并标UpdateCheck的所有列的以前的值被包含在生成的更新语句的where子句。如果更新影响了1行,一切都很好 - 如果它影响了0行(例如,其他人更改了其中一个值,因此在筛选后找不到该行),您将收到ChangeConflictException。
是的,它再次提取数据以验证并发性。
LINQ to SQL采用乐观并发控制,这意味着L2S检查数据的状态而不是锁定数据。您可以指定L2S应使用哪一列来确定数据是否更改。默认情况下,它会比较每一列。