Entity framework with TransactionScope

我們透過 EF 的 SaveChanges() 來增刪修資料庫資料, SaveChanges() 預設使用 transaction(交易) 包資料。

EF 也另外提供 DbContextTransaction 類別讓我們使用。範例如下:

DbEntities dbEntity = new DbEntities();
using (var transaction = dbEntity.Database.BeginTransaction())
{
    try
    {
        dbEntity.SaveChanges();
        transaction.Commit();
    }
    catch(Exception ex)
    {
       transaction.Rollback();
    }             
}

當有兩個以上的 DbContext ,比如需要把資料寫到兩個以上的不同資料庫,如何確保這些不同資料庫交易的一致性,EF 提供 TransactionScope 類別解決這問題。

TransactionScope

TransactionScope 內的不同資料庫連線,只要一個沒成功,就會 Rollback。

using (DBEntities db = new DBEntities())
{
    using (TransactionScope ts = new TransactionScope())
    {
        // do something A
        db.SaveChanges();
        // do something B
        db.SaveChanges();
        ts.Complete();
    }
}

參考

http://blog.darkthread.net/post-2012-12-19-transactionscope-suppress.aspx

1 關於 “Entity framework with TransactionScope” 的評論

發表留言