簡體   English   中英

如何跨多個方法傳遞 Dapper TransactionScope

[英]How to pass Dapper TransactionScope across multiple method

假設我有 2 種方法(A 和 B)

public void A()
{
   using (var connection = Database.GetConnectionString())
   using (var tran = new TransactionScope())
   {
       //do "A"
       tran.Complete()
   }
}

public void B()
{
   using (var connection = Database.GetConnectionString())
   using (var tran = new TransactionScope())
   {
       A(); //call "A"
       //do "B"
       tran.Complete()
   }
}

如您所見,方法B需要調用A ,但是AB都已經有了自己的TransactionScope ,在這種情況下,傳遞TransactionScope的正確方法是什么?

我的期望是當方法A被調用時,它會
-。 開始傳輸
-。 做“一個”
-。 提交翻譯

當方法B被調用時,它會
-。 開始傳輸
-。 做“一個”
-。 做“B”
-。 提交翻譯

任何幫助將不勝感激

TransactionScope是環境的,默認支持邏輯嵌套(又名TransactionScopeOption.Required ); 所以通常你並不需要將它傳遞任何地方——只要你(或 Dapper)打開 scope 內部的連接:它應該被包括在內。 當兩個這樣的TransactionScope嵌套時:有效地提交內部事務什么都不做(中止內部事務會破壞整個事務) - 提交外部事務會提交整個事務。

但是,坦率地說,我通常建議使用顯式 ADO.NET 事務而不是TransactionScope ,在這種情況下,您確實需要將其傳入; 可選參數是你的朋友。

另外:請注意TransactionScopeBEGIN TRAN / COMMIT TRAN幾乎完全分開; 它是一種完全不同的事務表示方式(因為它需要支持不同系統上的分布式事務——通常通過 LTM 或 DTC)。

暫無
暫無

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

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