首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

Hxj.Data 交易簡化新寫法:using 區塊自動 Commit/Rollback、支援 Try-Catch 模式

     編輯:關於ASP.NET

v1.7 交易 API 更新:更簡潔、相容舊版

新寫法:using 區塊自動管理交易週期

using (DbTrans trans = DbSession.Default.BeginTransaction()) {
    trans.Update(Products._.ProductName, "apple", Products._.ProductID == 1);
    trans.Update(Products._.ProductName, "egg", Products._.ProductID == 2);
    trans.Commit(); // 明確提交
}
// 區塊結束自動 Dispose,若未 Commit 則自動 Rollback

產生 SQL:兩條參數化 UPDATE 陳述句,同一交易內執行。

舊式 Try-Catch 寫法仍支援

DbTrans trans = DbSession.Default.BeginTransaction();
try {
    trans.Update(Products._.ProductName, "apple", Products._.ProductID == 1);
    trans.Update(Products._.ProductName, "egg", Products._.ProductID == 2);
    trans.Commit();
}
catch {
    trans.Rollback();
}
finally {
    trans.Close(); // 必須關閉釋放連線
}

關鍵差異

特性using 區塊Try-Catch
程式碼行數少多
例外自動 Rollback是(Dispose 時檢查)需手動 catch Rollback
連線釋放時機區塊結束finally Close()
巢狀交易不支援(單層)不支援

交易範圍限制

  • 僅支援 本地交易(單一資料庫連線),非分散式交易(DTC/TransactionScope)。
  • Insert/Update/Delete/FromSql/FromProc 皆可透過 DbTrans 參數加入交易。
  • 交易隔離等級可指定:BeginTransaction(IsolationLevel.ReadCommitted)。

進階:交易中查詢

using (DbTrans trans = DbSession.Default.BeginTransaction()) {
    trans.Update(...);
    // 同一交易內查詢:可見未認可變更
    var p = trans.From().Where(...).ToFirst();
    trans.Commit();
}

DbTrans.From<T>() 回傳共用同一連線/交易的查詢物件,確保讀取一致性。

最佳實務

  1. 預設使用 using 寫法,簡潔且安全。
  2. 需在 catch 區塊記錄錯誤/補償邏輯時,改用 Try-Catch。
  3. 交易範圍盡量縮小(只包含必要的寫入操作),減少鎖持有時間。
  4. 避免在交易中呼叫外部 Web Service/長時間運算,防止死鎖與逾時。

Hxj.Data 交易 API 以簡單實用為核心,滿足 90% 以上業務場景,複雜分散式交易建議改用 System.Transactions.TransactionScope。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved