ABP的UnitOfWork内部SaveChanges无效
应用层一个AppService默认是一个工作单元,默认是开启的,默认是事务的。因为应用服务方法应该是原子的且一般都会使用数据库。
但是有些情况需要关闭工作单元
1.AppService有多个操作需要操作数据库,但是有些操作需要就算是AppService出现了异常也要SaveChanges
例如,在某个方法中从数据库获取自动的编码(合同编码),然后第其他系统的接口(新建数据)0,如果接口调用成功了,但是AppService其他操作失败了,那么会抛异常,造成整个工作单元都没有
SaveChanges,那么下次再执行该操作时,还是同一个编码去调其他系统的接口,这个时候接口就会报错。
当然可以要求接口做幂等,但是如果其他系统的接口没有幂等的情况下,用这种方法可以避免错误,另外当然会带来来及数据,这是不可避免的
关闭工作单元的方式[UnitOfWork(isTransactional: false)]或者[UnitOfWork(false)]