当代码更新某个表中的某一行时,我的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()
来启动锁定的方法?
答案 0 :(得分:1)
有很多方法可以与Linq to SQL进行交易 - 但我还没有到达那里。
我同意处理解决并发问题(提示用户)的问题比使用事务更好,但是可能有帮助的几个链接:
LINQ to SQLTransactions (LINQ to SQL) (Microsoft)
和一段简短的视频:
http://www.microsoft.com/uk/msdn/nuggets/nugget/206/Transactions-in-LINQ-to-SQL.aspx
答案 1 :(得分:0)
不,您必须将您的事务包装在try / catch块中,并处理抛出的异常。 Linq to SQL提供了大量信息,使您能够以智能方式处理异常。见http://elsharpo.blogspot.com/2008/04/handling-concurrency-conflicts-in-linq.html
答案 2 :(得分:0)
最简单的方法是使用DataContext.ExecuteCommand并发送自己的更新语句。