簡體   English   中英

多個TransactionScope問題

[英]Multiple TransactionScope problem

我想創建一個事務,在子事務中寫入一些數據,讀回數據,然后回滾事務。

using(var transaction = new TransactionScope()) 
{
     using(var transaction = new TransactionScope()) 
     {
          // save data via LINQ / DataContext
          transaction.Complete();
     }
     // Get back for assertions
     var tempItem = // read data via LINQ / DataContext THROWS EXCEPTION
} 

但是在閱讀時我得到“System.Transactions.TransactionException:該操作對於事務的狀態無效。”

我應該如何設置事務屬性以避免這種情況?

如果沒有完整的堆棧跟蹤,則無法調試此異常。 根據具體情況,它有不同的含義。 通常這意味着你正在做一些你不應該在事務中做的事情,但是沒有看到db調用或堆棧跟蹤所有人都可以做的就是猜測。 我所知道的一些常見原因(我認為這絕不是全面的)包括:

  1. 在嵌套的TransactionScope訪問多個數據源(即不同的連接字符串)。 這會導致升級到分布式事務,如果您沒有運行DTC,它將失敗。 答案通常不是啟用DTC,而是清理事務或使用新的TransactionScope(TransactionOptions.RequiresNew)包裝其他數據訪問TransactionScope(TransactionOptions.RequiresNew)
  2. TransactionScope未處理的異常。
  3. 任何違反隔離級別的操作,例如嘗試讀取剛剛插入/更新的行。
  4. SQL死鎖; 在某些情況下,事務甚至會自行死鎖,但如果#1適用,將其他操作隔離到新事務中可能會導致死鎖,如果您不小心的話。
  5. 交易超時。
  6. 數據庫中的任何其他錯誤。

我絕對不知道每一個可能的原因,但是如果你在你的代碼中發布完整的堆棧跟蹤和實際的db調用,我會看看並告訴你我是否看到了什么。

你有兩個嵌套的TransactionScope對象?

並沒有嘗試抓住阻止。

http://msdn.microsoft.com/en-us/library/system.transactions.transactionscope.aspx

我想你會發現具體的答案是你無法完成一件尚未開始的交易,它處於無效狀態。 你真的有LINQ評論所在的代碼嗎? 連接真的建立了嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM