在ABP开启事务后 如下代码所示
using (var cmd = UnitOfWorkManager.Begin())
{
//***********相关业务代码***************
await cmd.CompleteAsync();
}
当加上事务后,照样提示Value cannot be null. (Parameter ‘unitOfWork’);
可以试下以下方式Task.Run
await Task.Run(async () =>
{
using (var cmd = UnitOfWorkManager.Begin(System.Transactions.TransactionScopeOption.RequiresNew))
{
//***********相关业务代码***************
await cmd.CompleteAsync();
}
});
System.Transactions.TransactionScopeOption.RequiresNew 表示在此事务中创建一个新的事务,而不是复用已经存在的事务。
因此在代码块结束时,无论是否发生异常,都会自动提交或回滚事务,并释放资源。