Linq版本的SELECT FOR UPDATE

时间:2009-12-04 17:50:42

标签: asp.net linq concurrency

当代码更新某个表中的某一行时,我的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()来启动锁定的方法?

3 个答案:

答案 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并发送自己的更新语句。