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