【发布时间】:2009-12-04 17:50:42
【问题描述】:
当代码更新某个表中的某个行时,我在我的 Web 应用程序中得到一个 ChangeConflictException。我能说的最好的情况似乎是两个用户同时完成了事务,而乐观并发只影响SubmitChanges() 方法,而不是在选择行时执行锁定。
所以换句话说,我有这样的交易:
Dim query = From row in Table _
Where row.ID = <blah> _
Select row
Dim result = query.Single()
result.COLUMN = 2
dataContext.SubmitChanges()
当调用SubmitChanges() 时,内置的乐观并发会锁定记录,但如果在Single() 和SubmitChanges() 之前更改记录,则会引发错误。
...至少这是我的理论...
有谁知道在Single() 调用而不是在SubmitChanges() 开始锁定的方法?
【问题讨论】:
-
根据我的理解,SubmitChanges() 似乎有内置的事务处理。所以可能有一个解决方案可以改变内置事务的处理方式。例如:DataContext.ExecuteCommand("SET TRANSACTION ISOLATION LEVEL SERIALIZABLE") 或类似的东西。
标签: asp.net linq concurrency