Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当LINQ更新失败时会发生什么?_Linq_Transactions - Fatal编程技术网

当LINQ更新失败时会发生什么?

当LINQ更新失败时会发生什么?,linq,transactions,Linq,Transactions,以下是场景: 进程1(P1)-读取各种平面文件,其结果是删除或向数据库表添加照片URL,以指示需要下载这些URL 进程2(P2)-查找需要下载的照片URL,实际执行下载,然后将记录标记为已下载 P1和P2有时会根据要处理的数据量并发运行,有时P1会删除P2已加载并准备下载的记录 这实际上不是一个问题-如果图像已下载但不再需要,这些图像URL的性质是,它可能会在以后被使用,空间也不重要。因此,唯一的问题是,如果P2选择了一组记录,然后其中一些记录在LINQ更新期间不再存在,SubmitChan

以下是场景:

  • 进程1(P1)-读取各种平面文件,其结果是删除或向数据库表添加照片URL,以指示需要下载这些URL
  • 进程2(P2)-查找需要下载的照片URL,实际执行下载,然后将记录标记为已下载
P1和P2有时会根据要处理的数据量并发运行,有时P1会删除P2已加载并准备下载的记录

这实际上不是一个问题-如果图像已下载但不再需要,这些图像URL的性质是,它可能会在以后被使用,空间也不重要。因此,唯一的问题是,如果P2选择了一组记录,然后其中一些记录在LINQ更新期间不再存在,SubmitChanges()会抛出一个错误,类似于:

“4次更新中有1次失败。”

我的问题是:更新失败时发生了什么?据我所知,有3种可能性:

  • 整个事务已回滚
  • 事务未回滚,所有可更新的记录都已恢复
  • 事务未回滚,第一条记录已更新,但第二条记录失败,因此未尝试其他更新
  • 实际调用如下-未设置冲突模式:

    this.SomeDataContext.SubmitChanges();
    
    如何更改此调用,以便可以执行的任何更新都将被忽略,而其他更新将被忽略?下面的方法是否起作用:

    this.SomeDataContext.SubmitChanges(ConflictMode.ContinueOnConflict);
    
    我在MSDN中没有看到任何指示无参数调用的默认ConflictMode的内容:

    …尽管在单参数调用中有一个指示,表明默认值为FailOnFirstConflict:


    使用Linq To SQL,调用SubmitChanges()时提交的所有更改都将作为单个事务保存或回滚。因此,如果在调用SubmitChanges()时有2个插入、2个更新和2个删除挂起,那么它们都将作为单个工作单元保存或回滚


    通过将所有SubmitChanges()调用包装在TransactionScope对象中,可以进行多个SubmitChanges()调用,并将所有SubmitChanges()的所有插入/更新/删除作为一个工作单元处理。

    我本来会发表评论,但声誉不足

    我在这里寻找默认冲突模式的答案。后来我发现

    现在似乎已经有记录了