关于解决linq并发冲突 的 ResolveAll 方法无效的问题

Sean918 2010-03-29 12:23:54
啥都不说 ,先上代码:

try
{
GlobalDB.SubmitChanges(System.Data.Linq.ConflictMode.ContinueOnConflict);
}
catch (System.Data.Linq.ChangeConflictException ex)
{
//foreach (System.Data.Linq.ObjectChangeConflict occ in GlobalDB.ChangeConflicts)
//{
// 使用当前数据库中的值,覆盖Linq缓存中实体对象的值
//occ.Resolve(System.Data.Linq.RefreshMode.OverwriteCurrentValues);

// 使用Linq缓存中实体对象的值,覆盖当前数据库中的值
//occ.Resolve(System.Data.Linq.RefreshMode.KeepCurrentValues);

// 只更新实体对象中改变的字段的值,其他的保留不变
//occ.Resolve(System.Data.Linq.RefreshMode.KeepChanges);
//}

GlobalDB.ChangeConflicts.ResolveAll(RefreshMode.KeepChanges,true);

// 再次提交更新
GlobalDB.SubmitChanges();
}



代码中用2种方法来解决并发冲突 :

1 注释部分是给每个 ObjectChangeConflict 指明解决冲突的方式。

2 非注释部分用 ResolveAll 来一次性指明解决冲突的方式。

现在的问题是,即使我这样写了(2种方法都试过),还是在最后 一行 报“找不到行或行已更改”的错误。

我是在自己的机器上调试,不可能有多次的并发冲突啊。

之前没有问题,后来我去数据库里面直接改了数据后,发生了并发冲突的问题;
然后加了上面的代码,可是仍然不能解决问题。
即使我选了一条我没有在数据库里面改过数据的记录来测试也一样,始终报错。

目前我只能将实体类中所有的属性都加上了 UpdateCheck = UpdateCheck.Never 来解决这个问题。

跪求这个问题的答案!
...全文
130 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Sean918 2010-03-31
  • 打赏
  • 举报
回复
跪求高人啊!
  • 打赏
  • 举报
回复
“最后一行”应该存在吗?
hyaoyan 2010-03-29
  • 打赏
  • 举报
回复
同意楼上
Sean918 2010-03-29
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 jaylongli 的回复:]
引用 3 楼 wxy_xiaoyu 的回复:
最后一行指 :

// 再次提交更新
GlobalDB.SubmitChanges();

应该存在的啊 ,前面是因为捕错跳入 catch 的,这里肯定要重新提交的啊


第一次提交更新了,第二次当然没有这条记录了。。
[/Quote]



晕到一塌糊涂了。。。。

第一次提交更新如果成功的话我还怎么会进入catch ???

就是因为第一次提交的时候发生了并发冲突问题才会进入catch 处理,处理结束后才有了我的第二次提交!
加油馒头 2010-03-29
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wxy_xiaoyu 的回复:]
最后一行指 :

// 再次提交更新
GlobalDB.SubmitChanges();

应该存在的啊 ,前面是因为捕错跳入 catch 的,这里肯定要重新提交的啊
[/Quote]

第一次提交更新了,第二次当然没有这条记录了。。
Sean918 2010-03-29
  • 打赏
  • 举报
回复
最后一行指 :

// 再次提交更新
GlobalDB.SubmitChanges();

应该存在的啊 ,前面是因为捕错跳入 catch 的,这里肯定要重新提交的啊

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧