Entity Framework中 批量提交 事務處理
Entity Framework中的批量提交與事務處理
在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已經成功執行了
這可能不一定符合我們的需要。如果我們需要 context1、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並沒有真正發生改變,如果事務終止,自動回滾,兩者的更改都沒有真正提交到資料庫,所以是可以成功回滾的。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25897606/viewspace-762663/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Entity Framework Core中的併發處理Framework
- MySQL中的事務處理MySql
- 分散式事務處理方案,微服事務處理方案分散式
- Entity Framework Tutorial Basics(8):Types of Entity in Entity FrameworkFramework
- 分散式事務處理兩階段提交機制和原理分散式
- C#處理Access中的事務C#
- 軟體中事務處理問題!
- MySQL事務處理MySql
- 12事務處理
- mysqli 事務處理MySql
- Entity Framework Tutorial Basics(20):Persistence in Entity FrameworkFramework
- Entity Framework Tutorial Basics(2):What is Entity Framework?Framework
- 分散式事務對於兩階段提交的錯誤處理分散式
- Entity Framework Tutorial Basics(29):Stored Procedure in Entity FrameworkFramework
- Entity Framework Tutorial Basics(3):Entity Framework ArchitectureFramework
- Entity Framework Tutorial Basics(4):Setup Entity Framework EnvironmentFramework
- Spring中的事務提交事件Spring事件
- ITL與事務處理
- redis的事務處理Redis
- php事務處理方法PHP
- java事務的處理Java
- MYSQL--事務處理MySql
- SpringDataRedis事務處理SpringRedis
- mysql事務處理(轉)MySql
- Entity Framework Code-First(23):Entity Framework Power ToolsFramework
- MySQL中不得不提的事務處理MySql
- Entity Framework(1)Framework
- entity framework in mysqlFrameworkMySql
- Entity Framework 教程Framework
- 如何批量處理word中的表格
- Laravel 分散式事務處理Laravel分散式
- springboot事務處理Spring Boot
- Spring (二) 事務處理Spring
- [MYSQL -26]控制事務處理MySql
- 分散式事務故障處理分散式
- JDBC事務處理設計JDBC
- SQL SERVER 事務處理(一)SQLServer
- sql server 事務處理(二)SQLServer