我正在使用 LINQ to SQL,并且在增加视图计数器交叉连接时遇到了一些问题。
我正在使用的一小段代码是:
t = this.AppManager.ForumManager.GetThread(id);
t.Views = t.Views + 1;
this.AppManager.DB.SubmitChanges();
现在在我的测试中,我非同时运行了多次。执行此测试的对象共有 4 个副本。
也就是说,没有锁定问题或类似问题,但有 4 个数据上下文。
现在,我希望它像这样工作:获取一行,修改一个字段,更新行。但是,这会引发 ChangeConflictException。
如果没有任何副本同时运行,为什么更改会发生冲突?
有没有办法忽略某个表上的更改冲突?
编辑:找到答案:
您可以在表的所有列上设置“UpdateCheck = Never”,以创建最后获胜的更新样式。这是应用程序在我将其移植到 LINQ 之前所使用的,所以我现在将使用它。
EDIT2:虽然我上面的修复确实阻止了异常被抛出,但它并没有解决根本问题:
由于我有多个数据上下文,因此每个对象最终都会有多个缓存副本。我应该在每次页面加载时重新创建我的数据上下文吗?
我宁愿指示数据上下文忘记一切。这可能吗?