page contents

efcore事务的几种方法?

轩辕小不懂 发布于 2022-03-01 14:59
阅读 854
收藏 0
分类:框架系列
3184
Nen
Nen
- 程序员

1、默认事务(SaveChanges)

(1).默认情况下,如果数据库提供程序支持事务,单个 SaveChanges() 调用中的所有变更都会在一个事务中被提交。如果其中任何一个变更失败了, 那么事务就会回滚,没有任何变更会被应用到数据库。这意味着 SaveChanges() 能够确保要么成功保存,要么在发生错误时不对数据库做任何修改。

(2).关闭默认事务:context.Database.AutoTransactionsEnabled = false; 

2. DbContextTransaction

(1). 使用方式

  BeginTransaction开启事务、Commit提交事务、Rollback回滚事务、Dispose销毁,如果用Using包裹的话,不再需要手动Rollback,走完Using会自动回滚。如果不用Using包裹事务,就需要在Catch中手动RollBack回滚,并且最好最后手动的Dispose一下。(如SameDbContext文件夹中的Test1和Test2方法)

(2). 使用场景

 A. 同一个上下文多个SaveChanges的方法(如:自增主键后续要用到)、SaveChanges和EF调用SQL语句混用 

3. 环境事务 TransactionScope

(1)使用方式

  new TransactionScope创建事务、Complete提交事务、 Transaction.Current.Rollback();回滚事务、Dispose销毁对象。如果用Using包裹的话,不再需要手动Rollback,走完Using会自动回滚。如果不用Using包裹事务,就需要在Catch中手动RollBack回滚,并且最好最后手动的Dispose一下。TransactionScope有三个属性:IsolationLevel(隔离等级),Timeout(超时),TransactionScopeOption(选项)

(2)用途

A. 同一个上下文的事务。(多个SaveChanges(自增主键后续用到的情况)、SaveChanges和EF调用SQL语句混用) 

B. 多种数据库技术访问同一个数据库的事务  

C. 同一个数据库多个不同的上下文是支持的 

D. 不同数据库的上下文是不支持的,(如Test4方法,开启msdtc服务的步骤:cmd命令→ net start msdtc ,然后发现报错:This platform does not support distributed transactions.说明目前Core平台下不支持分布式事务)

请先 登录 后评论