資料來源
http://neweden168.blogspot.tw/2014/08/transaction-in-linq-to-sql.html
Transaction in Linq to SQL
1.Implicit Transaction:
當沒有設定DataContext.Transaction也沒有包TransactionScope時,Call
SubmitChanges()會自動將新增/更新/刪除動作包成交易,最為簡便。但要注意,它限於同一個DataConext(當然,同一個DB
Connection),且Transaction的範圍無法包含SELECT。
2.Explicit Local Transaction:
前題是參與Transaction的DataContext要共用一條Connection,且要自己完成BeginTransaction、
Commit、Rollback等動作。設定DataContext.Transaction的時機可以決定是否將SELECT也納入
Transaction範圍。還有一點限制是,這種做法只限同一台DB,不支援分散式交易。
3.Explicit Distributable Transaction:
彈性最大,可支援異種資料庫的分散式交易,但要注意所有包含在TransactionScope中的資料庫動作都會啟用LTM或OleTx,成本頗為昂貴
(輕巧的LTM適用的條件很嚴苛,只限SQL 2005,如果TransactionScope中有涉及一台以上DB或對遠端SQL
2005開啟兩條以上連線,一定是用貴森森的OleTx),可以視需要將不必參與Transaction的部分隔離開來,以增進效能。(延伸閱讀:
.NET分散式交易程式開發FAQ )