回答

收藏

LINQ to SQL:并发解析

技术问答 技术问答 220 人阅读 | 0 人回复 | 2023-09-14

鉴于此LINQ to SQL:
4 V* M! n. A: t! k$ U: x; r( gusing (var db = Database.Context){    var root = (from post in db.Post                where post.Id == rootPostId                select post).Single();     root.LastActivityUtc = DateTime.UtcNow;    db.SubmitChanges();}若使用相同的rootPostId再次调用同一方法(此代码的位置)并发更改同一记录会发生什么?会抛出异常吗?
7 ?9 Y( C* X( X. [, m在这种情况下(并发冲突),我想简单地放弃所做的改变来处理它,以便只提交正确的LastActivityUtc一个更新,而不是同时提交这两个更新,无论如何都会有相同的值。, s  c( w3 M5 q9 h
                                                                6 r9 Z, r+ a/ L$ N+ S/ @
    解决方案:                                                                6 ~" ], C" e% t- c( G5 j
                                                                你可以通过捕获ChangeConflictException检测并解决您的并发问题:+ r  q- o! y4 ^5 v" b2 ^
using (var db = new MyDataContext(){     var root = (from post in db.Post                where post.Id == rootPostId                select post).Single();     root.LastActivityUtc = DateTime.UtcNow;    try                                                                                                                                                                                                                 db.SubmitChanges();     }    catch (ChangeConflictException)                                                                                                                                                                                                                 db.ChangeConflicts.ResolveAll(RefreshMode.KeepChanges);        db.SubmitChanges();     }}使用RefreshMode, C2 ^" K# G8 p; I1 J( T
.KeepChanges,您将保留客户对象的所有变更,并合并其他用户的其他字段。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则