Entity Framework 的事務

一個db.SaveChanges()至關於一個事務,多個db.SaveChanges()保證操做完整性則須要使用事務html

在Entity Framework 中使用事務,事務只會對數據庫操做進行回滾,不會對內存操做作回滾數據庫

1.一個db.SaveChanges():分佈式

ModelEntity集 db =new ModelEntity集();spa

Entity e=new Entity();code

e.屬性賦值……;htm

db.SaveChanges();blog

2.多個db.SaveChanges():事務

添加引用:System.Transactions內存

using(var scope = new System.Transactions.TransactionScope()){ci

各類邏輯屬性賦值處理……;

dbA.SaveChanges();

dbB.SaveChanges();

scope.Complete();   //提交事務,若是有問題則自動回滾

}

 

如下轉自:http://www.cnblogs.com/hyl8218/archive/2011/10/10/2205576.html

在Entity Framework 中使用SaveChanges()是很頻繁的,單次修改或刪除數據後調用SaveChanges()返回影響記錄數。

要使用批量修改或者批量刪除數據,就須要SaveChanges(false)+AcceptAllChanges()方法了。

 SaveChanges(false) 只是通知EF須要對數據庫執行的操做,在內存中是屬於掛起狀態,在必要的時候是能夠撤銷的,好比AcceptAllChange()提交爲真正成功,EF將撤銷SaveChanges(false)的操做。

而在處理分佈式事務操做的時候,就有必要使用TransactionScope 來處理了,不少時候咱們會這樣寫:

using (TransactionScope scope = new TransactionScope())
{
    //Do something with context1
    //Do something with context2

    //Save and discard changes
    context1.SaveChanges();

    //Save and discard changes
    context2.SaveChanges();

    //if we get here things are looking good.
    scope.Complete();
}
可是這樣寫是有風險的,假 

如context1.SaveChanges()成功了,context2.SaveChanges()倒是有問題的,咱們在scope.Complete()提交事務的時候就會終止,而Context1已經成功執行了

這可能不必定符合咱們的須要。若是咱們須要 context一、context2要不一樣時執行成功,要不都不成功,咱們須要對代碼做小小的調整,如用下面的代碼: 

 

using (TransactionScope scope = new TransactionScope())
{
    //Do something with context1
    //Do something with context2

    //Save Changes but don't discard yet
    context1.SaveChanges(false);

    //Save Changes but don't discard yet
    context2.SaveChanges(false);

    //if we get here things are looking good.
    scope.Complete();
    context1.AcceptAllChanges();
    context2.AcceptAllChanges();

}
咱們用SaveChanges(false)先將必要的數據庫操做命令發送給數據庫,這是注意context1與context2並無真正發生改變,若是事務終止,自動回滾,二者的更改都沒有真正提交到數據庫,因此是能夠成功回滾的。

在Entity Framework 中使用SaveChanges()是很頻繁的,單次修改或刪除數據後調用SaveChanges()返回影響記錄數。

要使用批量修改或者批量刪除數據,就須要SaveChanges(false)+AcceptAllChanges()方法了。

相關文章
相關標籤/搜索