代码之家  ›  专栏  ›  技术社区  ›  Adam

要更新的select的linq版本

  •  0
  • Adam  · 技术社区  · 15 年前

    我得到了 ChangeConflictException 在我的Web应用程序中,当代码更新某个表中的某一行时。据我所知,似乎两个用户同时完成了事务,乐观的并发性只影响 SubmitChanges() 方法,而不是在选定行时执行锁定。

    所以换句话说,我有这样一个交易:

    Dim query = From row in Table _
                Where row.ID = <blah> _
                Select row
    Dim result = query.Single()
    result.COLUMN = 2
    dataContext.SubmitChanges()
    

    内置的乐观并发在 子改变() 调用,但如果在 Single() 以前 子改变() 然后抛出一个错误。

    …至少这是我的理论…

    有人知道怎么启动锁吗 单() 打电话而不是在 子改变() ?

    3 回复  |  直到 15 年前
        1
  •  0
  •   Robert Harvey    15 年前

    不,您必须将事务包装在一个try/catch块中,并处理抛出的异常。LinqToSQL提供了大量信息,允许您以智能方式处理异常。见 http://elsharpo.blogspot.com/2008/04/handling-concurrency-conflicts-in-linq.html

        2
  •  1
  •   Murph    15 年前

    有一些方法可以使用LinqToSQL进行事务处理——但我还没有做到。

    我同意,解决并发问题(提示用户)也可能比使用事务更好,但是,一些链接可能有助于:

    LINQ to SQLTransactions (LINQ to SQL) (Microsoft)

    还有一个简短的视频:

    http://www.microsoft.com/uk/msdn/nuggets/nugget/206/Transactions-in-LINQ-to-SQL.aspx

        3
  •  0
  •   Amy B    15 年前

    最简单的方法是使用dataContext.ExecuteCommand并发送自己的update语句。