鉴于此 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 的一个更新,而不是同时提交两者,无论如何,这可能具有相同的值。
您可以通过捕获更改冲突异常 http://msdn.microsoft.com/en-us/library/system.data.linq.changeconflictexception.aspx:
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();
}
}
With 刷新模式 http://msdn.microsoft.com/en-us/library/system.data.linq.refreshmode.aspx.KeepChanges 您将保留您的客户端对象的所有更改,并且其他用户对其他字段的更改将被合并。
推荐文章:
- 乐观并发概述 http://msdn.microsoft.com/en-us/library/bb399373.aspx
- LINQ To SQL 示例 - 乐观并发 http://msdn.microsoft.com/en-us/vbasic/bb737933.aspx
- 通过与数据库值合并解决并发冲突 (LINQ to SQL) http://msdn.microsoft.com/en-us/library/bb386918.aspx
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)