組件提供 DbTrans 封裝 ADO.NET 交易,不支援分散式交易(DTC)。
using (DbTrans trans = DbSession.Default.BeginTransaction()) {
DbSession.Default.Update(Products._.ProductName, "apple", Products._.ProductID == 1, trans);
DbSession.Default.Update(Products._.ProductName, "egg", Products._.ProductID == 2, trans);
trans.Commit(); // 必須明確提交
}
所有寫入方法(Insert/Update/Delete)皆有 DbTrans 多載。
DbTrans trans = DbSession.Default.BeginTransaction();
try {
DbSession.Default.Update(..., trans);
DbSession.Default.Update(..., trans);
trans.Commit();
}
catch {
trans.Rollback();
}
finally {
trans.Close();
}
DbTrans trans = DbSession.Default.BeginTransaction();
DbSession.Default.FromProc("Ten Most Expensive Products").SetDbTransaction(trans).ToDataTable();
DbSession.Default.FromSql("UPDATE Products SET UnitPrice = UnitPrice * 1.1").SetDbTransaction(trans).Execute();
trans.Commit();
SetDbTransaction(trans) 將命令納入交易範圍。
DbTrans trans = DbSession.Default.BeginTransaction(IsolationLevel.ReadCommitted);
// 或 Serializable, RepeatableRead, ReadUncommitted 等
TransactionScope。trans 參數,易漏傳導致部分操作落在交易外。TransactionScope 整合、環境交易自動感知、巢狀交易支援。現階段適合單一資料庫、簡單業務邏輯的交易需求,代碼量極少、學習曲線平緩。