抛弃TransactionScope

之前实现过类似功能是使用的TransactionScope,总碰到这样那样的问题,新项目迁移到.net core2.0下,果断抛弃之前的写法,因为DbContext的SaveChanges方法已经实现了UOW的功能

定义UOW

public interface IUnitOfWork{/// <summary>/// 提交事务/// </summary>/// <returns>受影响行数</returns>int Commit();}

 public class UnitOfWork : IUnitOfWork{private readonly IDbContext _context;public UnitOfWork( IDbContext context){_context = context ?? throw new ArgumentNullException(nameof(context));}public int Commit(){return _context.SaveChanges();}}

定义IActionFilter实现类

如果action执行结束后未发现异常,则提交事务(最终调用DbContext的SaveChanges方法)

public class GenericBusinessActionFilter : IActionFilter{private readonly IUnitOfWork _unitOfWork;public GenericBusinessActionFilter(IUnitOfWork unitOfWork){_unitOfWork = unitOfWork;}public void OnActionExecuting(ActionExecutingContext context){// do something before the action executes}public void OnActionExecuted(ActionExecutedContext context){if (context.Exception == null){//uow commit_unitOfWork.Commit();}}}

注册过滤器

UOW注入

项目使用了autofac注入框架,未使用任何注入框架的同学可以通过.netcore自带的注入服务services.AddScoped方法实现.

services.AddScoped<IUnitOfWork, UnitOfWork>();

最关键的一点,引用圣杰的一句话:

确保Uow和Reopository之间共享同一个DbContext实例

这里我们限定了DbContext和UnitOfWork的生命周期为Scoped,从而确保每次请求共用同一个对象。如何理解呢?就是整个调用链上的需要注入的同类型对象,使用是同一个类型实例。

最后

本文实现了全局UOW,所有Action不用写任何代码就可以实现事务提交,看完一脸懵逼的同学需要先了解DDD和UOW相关概念

感谢『圣杰』的文章(http://www.cnblogs.com/sheng-jie/p/7416302.html#autoid-3-0-0)提供思路

转载于:https://www.cnblogs.com/GreedyL/p/7474368.html

.Net Core2.0基于DbContext,IActionFilter过滤器实现全局UOW,不使用TransactionScope相关推荐

  1. Asp.Net Core2.0 基于QuartzNet任务管理系统

    Quartz.NET官网地址:https://www.quartz-scheduler.net/ Quartz.NET文档地址:https://www.quartz-scheduler.net/doc ...

  2. 浅析Entity Framework Core2.0的日志记录与动态查询条件

    前言 Entity Framework Core 2.0更新也已经有一段时间了,园子里也有不少的文章.. 本文主要是浅析一下Entity Framework Core2.0的日志记录与动态查询条件 去 ...

  3. net core体系-web应用程序-4asp.net core2.0 项目实战(1)-10项目各种全局帮助类

    本文目录 1.  前沿 2.CacheHelper基于Microsoft.Extensions.Caching.Memory封装 3.XmlHelper快速操作xml文档 4.Serializatio ...

  4. Slickflow.NET 开源工作流引擎基础介绍-.NET Core2.0 版本实现介绍

    前言:.NET Core 是.NET Framework的新一代版本,是微软开发的第一个跨平台 (Windows.Mac OSX.Linux) 的应用程序开发框架(Application Framew ...

  5. Asp.NET Core2.0 项目实战入门视频课程_完整版

    END OR START? 看到这个标题,你开不开心,激不激动呢? 没错,.net core的入门课程已经完毕了.52ABP.School项目从11月19日,第一章视频的试录制,到今天完整版出炉,离不 ...

  6. 从壹开始前后端分离【 .NET Core2.0 +Vue2.0 】框架之八 || API项目整体搭建 6.3 异步泛型仓储+依赖注入初探...

    代码已上传Github+Gitee,文末有地址 番外:在上文中,也是遇到了大家见仁见智的评论和反对,嗯~说实话,积极性稍微受到了一丢丢的打击,不过还好,还是有很多很多很多人的赞同的,所以会一直坚持下去 ...

  7. 从壹开始前后端分离【 .NET Core2.0 +Vue2.0 】框架之十一 || AOP自定义筛选,Redis入门 11.1...

    大神留步 先说下一个窝心的问题,求大神帮忙,如何在Task异步编程中,使用Redis存.取Task<List<T>>泛型,有偿帮助,这里谢谢,文末有详细问题说明,可以留言或者私 ...

  8. Spring3.2.0-mybatis3.2.0 基于全注解搭建的后台框架-基础版

    2019独角兽企业重金招聘Python工程师标准>>> 摘要: Spring3.2.0-mybatis3.2.0 基于全注解搭建的后台框架-基础版 没有什么不可能  之前一直用的是自 ...

  9. Centos7 系统下搭建.NET Core2.0+Nginx+Supervisor+Mysql环境

    一.简介 一直以来,微软只对自家平台提供.NET支持,这样等于让这个"理论上"可以跨平台的框架在Linux和macOS上的支持只能由第三方项目提供(比如Mono .NET).直到微 ...

最新文章

  1. iota和左移右移的用法
  2. linux .net core java_仅在.NET Core 2.0运行时的Linux上缺少运行时存储库错误
  3. 异步socket优雅的关闭-CancelIO和SO_LINGER
  4. java8方法引用符合_Java8 方法引用和构造方法引用
  5. Linux机器件拷贝文件
  6. centos下php5.4.22连接mssql,IIS7.5配置php5.4.22链接sql2008(用PDO链接数据库)_PHP教程...
  7. 在Windows 2003 IIS 6.0中配置PHP的运行环境(图)
  8. 【嵌入式Linux】嵌入式Linux应用开发基础知识之网络通信
  9. 【题解】Luogu P5071 [Ynoi2015]此时此刻的光辉
  10. 我的WCF4 Rest Service及Entity Framework with POCO之旅(三)——用Entity Framework和POCO Template实现数据模型及存储...
  11. 为什么磁盘慢会导致Linux负载飙升?
  12. [20180625]10g下查询条件rownum = 0.txt
  13. 从菜鸟到资深工程师的进阶之路-任玉刚专访
  14. 工业互联网是什么?发展有多厉害?
  15. SIM卡无法识别经验案例
  16. 转载精品:工作8年的普通专科生程序员的一些感悟
  17. qq截图快捷键,小编教你qq截图快捷键怎么设置
  18. Mac电脑没有声音但是重启后恢复
  19. 渗透测试常用文件传输方法-Windows篇(如何向Windows服务器中上传文件?) (゚益゚メ) 渗透测试
  20. Kindle电子书整理脚本

热门文章

  1. Winform窗体防抖动
  2. 耗时统计利器——StopWatch秒表
  3. Spring 核心技术与产品理念剖析【下】
  4. 【网络】流量监控 - iftop|ifstat|查看某个ip流量|tcpdump|iptraf|Linux
  5. 小米10获取root权限_红米Note8Pro 怎么获取ROOT权限-Magisk授权-安装Exposed
  6. WEBPLAYER9电影资源站小偷程序由 宋飞飞发布
  7. lnmp一键安装包不能允许php文件,lnmp一键安装包常见问题解决方法
  8. 解扰matlab,数据序列的扰乱与解扰的MATLAB实现及性能分析——利用19级m序列
  9. 物流业如何借力物联网
  10. java笔试题String字符串单词逆序how are you变成are you how