簡體   English   中英

TransactionScope 不能跨打開自己的連接的方法工作

[英]TransactionScope not working across methods which open their own connections

我似乎無法讓 TransactionScope 在類中跨 function 調用工作。 我正在使用 .NETCORE 3.0 和 DAPPER。 我認為這會相對簡單,但無論我做什么,它都行不通。 下面是當前的實現。 為了澄清起見,我希望下面的實現提交(試圖確保它在失敗時工作)。 現在它總是這樣。

using (var transactionScope = new TransactionScope())
{
      var task = new Task(ConnectionString);
      var taskToUpdate = task.Get(1);
      taskToUpdate.action = "test";
      task.Update(taskToUpdate);
      var updatedTask = task.Get(1);
}

至於任務 class 中的實際連接調用,它們是:

        public void Get(Id)
        {
             using (var db = _dataLayer.Connection)
             {
                   //// Get Task
             }
        }

        public void Update(Task)
        {
             using (var db = _dataLayer.Connection)
             {
                 //Update the task
             }
        }

_dataLayer 被注入到任務 class 中,它所做的只是返回新的連接。 _dayaLayer.Connection 中的實際連接是:

return new DBConnection("connectionString");

無論我做什么,它總是承諾。 我在這里做錯了什么? 根據我在網上收集的內容和其他關於 SO 的答案,只要您在事務 scope 中打開連接(它在 Task 類中執行),那么它應該被視為一個 DB 調用。 我已經嘗試了多種實現,但似乎無法讓它工作。 任何見解將不勝感激。

像這樣在 using 語句的末尾添加transactionScope.Complete()

using (var transactionScope = new TransactionScope())
{
      var task = new Task(ConnectionString);
      var taskToUpdate = task.Get(1);
      taskToUpdate.action = "test";
      task.Update(taskToUpdate);
      var updatedTask = task.Get(1);

      transactionScope.Complete();
}

暫無
暫無

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

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