[C#] 初探Entity Framework (八) – Transaction

這篇簡單實作Entity Framework的Transaction使用方式

2016.11.08修正

一般寫asp.net時,通常一個DBContext用完即丟
參考:Entity Framework DbContext 物件的生命週期 – Huan-Lin學習筆記

不過我目前是開發Winform專案
User 之間本身就是隔離的獨立個體
因此有時會重複使用DBContext
好處是可以善用快取、追蹤、交易管理等功能

交易處理的參考網頁:Working with Transactions (EF6 Onwards)
簡單的實作方法如下

public void UploadToDB(EFEntities ef)
{
    using (DbContextTransaction tran = ef.Database.BeginTransaction())
    {
        try
        {
            //暫時取消AutoDetect,提高新增資料的效率
            ef.Configuration.AutoDetectChangesEnabled = false; 
            
            //這邊自行撰寫,對你的資料庫進行新增、修改、刪除等工作
            ef.SaveChanges();

            tran.Commit(); //成功SaveChange後,才讓此交易成立
            MessageBox.Show("上傳完成");
        }
        catch (Exception ex)
        {
            MessageBox.Show("上傳錯誤,將顯示錯誤訊息");
            MessageBox.Show(ex.ToString());
            tran.Rollback();//SaveChange失敗,取消此交易動作
        }
        finally
        {
            ef.Configuration.AutoDetectChangesEnabled = true;
        }
    }
}