鉴于此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更新而不是两者,这可能具有相同的值.
您可以通过捕获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,您将保留客户端对象的所有更改,并且将合并来自其他字段的其他用户的更改.
推荐文章:
| 归档时间: |
|
| 查看次数: |
1018 次 |
| 最近记录: |