iT邦幫忙

0

C# Commit & Rollback 問題

  • 分享至 

  • xImage

各位先進好,想請教個小問題~
目前專案在早期程式裡,同一個頁面有多個table資料,有各自的button可操作CRUD,也有一個操作所有table一次更新的功能。
因為早期的寫法雖然是一個button可以操作完所有table的資料,但實質上還是用ajax call api各別呼叫,各別處理
例如:

$.ajax({
    url:'http://abc.com'
    type:'POST',
    data:jsonStr,
    //CRUD Table1
    success:function(data){
        $.ajax({
            url:'http://abc.com'
            type:'POST',
            data:jsonStr,
            //CRUD Table2
            success:function(data){
                //依序處理Table3, Table4
            }
            
    }
});

各自呼叫的API各自處理Commit與Rollback

public void RollbackTest(Model data)
{
    try
    {
        //CRUD processing...
        
        Commit();
    }
    catch (Exception ex)
    {
        Rollback();
        throw ex;
    }
}

現在要改寫為所有資料要一併處理,若其中有任一個地方資料處理錯誤,那所有資料都要一併Rollback回來。
所以想要確認的是,唯一的方法就是將所有Table1~N的資料打包成一組JSON,一次送進API處理,這樣才能逹到將所有資料一次性Rollback的需求,還是有其它更好方法是我經驗不夠沒想到的呢?
感謝各位先進的指教~

石頭 iT邦高手 1 級 ‧ 2021-02-14 23:29:53 檢舉
我建議可以用transaction來處理就用transaction來處理 (注意包的範圍 不然會造成嚴重blocking)
假如真需要自己handle Rollback或commit會有點麻煩....
你可以看看 Memento pattern
https://en.wikipedia.org/wiki/Memento_pattern
leo226 iT邦新手 4 級 ‧ 2021-02-15 22:39:18 檢舉
看了一下transaction的說明,其中關於transactionName 和IsolationLevel這兩個參數還是沒有看的很懂~
1. transactionName這名稱是自訂,那它的作用會在那邊用到?還是一定要給它個名稱,當Rollback時C#會自動去參考這個名稱使用?
//官方說明:參數中的值 transactionName 可以在稍後呼叫方法的參數中使用 Rollback savePoint Save 。
但範例的Rollback 和 Commit都直接調用,也沒有再特別指定transactionName
2.IsolationLevel這個參數要如何選擇適合的Level?
SqlTransaction transaction;
// Start a local transaction.
transaction = connection.BeginTransaction(
IsolationLevel.ReadCommitted, "SampleTransaction");
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友回答

立即登入回答