gpt4 book ai didi

sql - LINQ to SQL : Concurrency resolution

转载 作者:行者123 更新时间:2023-12-04 18:54:27 42 4
gpt4 key购买 nike

鉴于此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();
}

如果使用相同的rootPostId再次调用同一方法(此代码所在的位置)并发更改同一记录,将会发生什么情况?会抛出异常吗?

在这种情况下(并发冲突),我想通过简单地放弃所做的更改来处理它,以便仅提交对LastActivityUtc的一个更新,而不是同时提交这两个更新,无论如何更新都将具有相同的值。

最佳答案

您可以通过捕获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();
}
}

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

推荐文章:
  • Optimistic Concurrency Overview
  • LINQ To SQL Samples - Optimistic Concurrency
  • Resolve Concurrency Conflicts by Merging with Database Values (LINQ to SQL)
  • 关于sql - LINQ to SQL : Concurrency resolution,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1174311/

    42 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com