2010-02-26 61 views
0

這裏的情形:當LINQ更新失敗時會發生什麼?

  • 工序1(P1) - 不同的平面文件讀取一個後果是刪除或添加照片的URL到數據庫表以指示這些需要下載
  • 過程2 (P2) - 查看需要下載的照片URL,實際執行下載,然後將記錄標記爲已下載

P1和P2有時根據要處理的數據量同時運行,有時P1會刪除記錄P2已經加載並準備下載。

這實際上並不是一個問題 - 如果圖片下載但不再需要,這些圖片網址的性質使得它最終可能在晚些時候被使用,而且空間也不用擔心。所以,唯一的問題是,如果P2選擇一組記錄,然後其中的一些記錄停止LINQ更新過程中存在的錯誤是由的SubmitChanges()類似拋出:

「1 4個更新失敗「。

我的問題是:此更新失敗時發生了什麼?據我所知,有3種可能性:

  1. 整個事務回滾
  2. 該交易不會回退,可能被更新了
  3. 該交易不會回滾所有記錄第一條記錄已更新,但第二條記錄失敗,因此其餘更新未嘗試。

的實際通話情況如下 - 沒有ConflictMode集:

this.SomeDataContext.SubmitChanges(); 

這將如何調用被改變,使得可以執行任何更新會和其他人忽略?請問下面做的伎倆:

this.SomeDataContext.SubmitChanges(ConflictMode.ContinueOnConflict); 

我沒有看到在MSDN的任何指示參數少調用默認ConflictMode:

http://msdn.microsoft.com/en-us/library/bb292162.aspx

..though有跡象在單參數呼叫指示默認是FailOnFirstConflict:

http://msdn.microsoft.com/en-us/library/system.data.linq.datacontext.submitchanges.aspx

回答

2

使用Linq-To-SQL時,調用SubmitChanges()時提交的所有更改將保存或回滾爲單個事務。因此,如果有2個插入,2個更新和2個刪除待調用SubmitChanges()時,它們全部被保存或回滾爲一個工作單元。

通過在TransactionScope對象內包裝所有SubmitChanges()調用,可以進行多次SubmitChanges()調用並將所有SubmitChanges()中的所有插入/更新/刪除視爲單個工作單元。

相關問題