LINQ to SQL:并发解析

cor*_*ore 5 sql linq

鉴于此LINQ to SQL:

using (var db = Database.Context)
{
    var root = (from post in db.Post
                where post.Id == rootPostId
                select post).Single();

    root.LastActivityUtc = DateTime.UtcNow;

    db.SubmitChanges();
}
Run Code Online (Sandbox Code Playgroud)

如果同一个记录被另一个调用同一方法(此代码所在的位置)同时更改并使用相同的rootPostId会发生什么?是否会抛出异常?

在这种情况下 - 并发冲突 - 我想通过简单地丢弃更改来处理它,以便只提交一个LastActivityUtc更新而不是两者,这可能具有相同的值.

CMS*_*CMS 6

您可以通过捕获ChangeConflictException来检测并解决并发问题:

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();
    }
}
Run Code Online (Sandbox Code Playgroud)

使用RefreshMode .KeepChanges,您将保留客户端对象的所有更改,并且将合并来自其他字段的其他用户的更改.

推荐文章: