以下是该方案:
P1和P2有时会根据要处理的数据量同时运行,有时P1会删除P2已经加载并准备下载的记录。
这实际上不是问题 - 如果图像被下载但不再需要,这些图像URL的性质可能最终在以后的日期被使用,并且空间无关紧要。因此,唯一的麻烦是,如果P2选择一组记录,然后在LINQ更新期间其中一些记录不再存在,则SubmitChanges()会抛出一个错误,类似于:
“4次更新中的1次失败。”
我的问题是:此更新失败后发生了什么?据我所知,有3种可能性:
实际调用如下 - 没有设置ConflictMode:
this.SomeDataContext.SubmitChanges();
如何更改此调用,以便可以执行的任何更新和其他更新都被忽略?以下是否有效:
this.SomeDataContext.SubmitChanges(ConflictMode.ContinueOnConflict);
我没有在MSDN中看到任何指示无参数调用的默认ConflictMode:
http://msdn.microsoft.com/en-us/library/bb292162.aspx
..虽然单个参数调用中有一个指示,表明默认值为FailOnFirstConflict:
http://msdn.microsoft.com/en-us/library/system.data.linq.datacontext.submitchanges.aspx
答案 0 :(得分:2)
使用Linq-To-SQL,调用SubmitChanges()时提交的所有更改都将作为单个事务保存或回滚。因此,如果在调用SubmitChanges()时有2个插入,2个更新和2个删除,则它们将作为单个工作单元保存或回滚。
通过在TransactionScope对象中包装所有SubmitChanges()调用,可以进行许多SubmitChanges()调用并将所有SubmitChanges()中的所有插入/更新/删除视为单个工作单元。
答案 1 :(得分:0)
我会评论,但没有足够的声誉。
我在这里寻找对使用的默认ConflictMode的答案。后来我找到了http://msdn.microsoft.com/en-us/library/bb345081(v=vs.90).aspx
现在似乎记录了它。