2015年11月19日 星期四

Transaction in Linq to SQL

資料來源
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 )