天天看點

asp.net MVC 事務

使用事務的目的是什麼?

保證事務範圍内的代碼,要麼全部執行,要麼全不執行,也就是出錯復原。

寫在資料庫腳本裡很好了解,但是用在應用程式層面,沒有看到catcha error rallback的代碼,心裡還是不踏實:

1、應用程式層面使用TransactionScope,在Scope範圍内沒有catch error并復原的代碼,是以想知道如果在Complete之前出錯,會是什麼情況?

 本人設定了應用程式層面的報錯,報錯前後都有資料庫操作,執行結果: 事務自動復原

 本人設定了資料庫腳本層面報錯,執行結果:自動復原

2、在程式編碼中我們仍然需要知道事物是否成功執行,實作方案是在scope外部try catch(TransactionAbortedException ex)

以下是标準文法

try
{
    using (TransactionScope scope = new TransactionScope())
    {
        // Do Operation 1
        // Do Operation 2
        //...
 
        // 如果所有的操作都執行成功,則Complete()會被調用來送出事務
        // 如果發生異常,則不會調用它并復原事務
        scope.Complete();
    }
}
catch (TransactionAbortedException ex) { 
  //異常處理
  writer.WriteLine("TransactionAbortedException Message: {0}", ex.Message); 
}
      

  

總結:

在Complete()之前,無論是出現程式級别的錯誤,還是資料庫級别的錯誤,事物都會復原。不需要寫rollback,而這些是通過架構處理的。

通過監測資料庫正在執行的事務,可以觀察事務在代碼運作過程中的狀态

檢視active transaction 的sql

select * from sys.dm_tran_session_transactions

 官方文檔:

 TransactionScope 類 (System.Transactions) | Microsoft Docs

更詳細更深入的用法,點選連結:

https://www.cnblogs.com/yilezhu/p/10170712.html

本文來自部落格園,作者:jiayouliucui,轉載請注明原文連結:https://www.cnblogs.com/cheery-go/p/15608322.html