暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【Blog.Core】事务AOP问题基本修复

NetCore 从壹开始 2020-04-08
336


很感谢Github中的小伙伴 cd-zhang2020 提出的方案,

Issue地址:https://github.com/anjoy8/Blog.Core/issues/52

(或点击阅读原文,查看此Issue)


感觉是最简单,又没问题的,至少目前我测试了Sqlite和SqlServer,他测试了Mysql后没有问题,感兴趣的小伙伴可以自己尝试下,代码很简单:

  try
{
Console.WriteLine($"Begin Transaction");


_unitOfWork.BeginTran();


invocation.Proceed();




// 异步获取异常,先执行
      // 就是这里
if (IsAsyncMethod(invocation.Method))
{
var result = invocation.ReturnValue;
if (result is Task)
{
Task.WaitAll(result as Task);
}
}
_unitOfWork.CommitTran();


}
catch (Exception)
{
Console.WriteLine($"Rollback Transaction");
_unitOfWork.RollbackTran();
}



然后记得开启我们的事务AOP的阀门:


结果如图,我们故意在Service中放置一个异常,多次操作后,完美回滚:


目前为止,项目的唯一遗留问题基本解决完成,开发进度进入尾声(仅剩支付和消息)。

文章转载自NetCore 从壹开始,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论