一個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();
}
在Entity Framework 中使用SaveChanges()是很頻繁的,單次修改或刪除數據後調用SaveChanges()返回影響記錄數。
要使用批量修改或者批量刪除數據,就須要SaveChanges(false)+AcceptAllChanges()方法了。