数据库事务 工作单元
如果全部成功则提交 出现一个失败则回滚
给person.Name赋值了 不需要进行保存方法 数据库中的数据会自动修改
下面两种开启事务不知道有什么区别
需要创建这个对象进行依赖注入private readonly IUnitOfWorkManager unitOfWorkManager;
注意:工作单元没有不传TransactionScopeOption.RequiresNew参数 他不会等这个工作单元执行完毕就直接执行后面的
开启一个工作单元作用域
需要手动调用unitOfWord.Complete()方法 如果全部成功 则保存更改并提交事务
TransactionScopeOption.RequiresNew加了这个参数 会先执行完毕这个工作单元中的任务 在执行后面的
在ABP中 应用服务层直接通过await CurrentUnitOfWork.SaveChangesAsync(); 提交事务 会先提交到一个缓存层的地方 实际上并没有提交到数据库 还是会等方法执行完毕才把整个事务提交到数据库
通过注入IUnitOfWorkManager开启事务
第一种方式 参数为TransactionScopeOption.Required 如果当前没有开启事务 则开启事务 如果已经开启事务 就会把using中的代码放到前面开启的事务中
和上面那种方式一样 并没有提交到数据库
using (var unitOfWork = unitOfWorkManager.Begin(TransactionScopeOption.Required)) { await salesOrderRepository.InsertAsync(salesOrder); await unitOfWork.CompleteAsync(); }
第二种 TransactionScopeOption.RequiresNew 每次都会开启新事物 会局部先提交
在using代码中跟踪的实体会先提交到数据库
第三章 TransactionScopeOption.Suppress 跟第二种方式一样 会提交到数据库