Maintains a list of objects affected by a business transaction and coordinates the writing out of changes and the resolution of concurrency problems.

  Unit of Work --Martin Fowler

Unit Of Work模式,由马丁大叔提出,是一种数据访问模式。UOW模式的作用是在业务用例的操作中跟踪对象的所有更改(增加、删除和更新),并将所有更改的对象保存在其维护的列表中。在业务用例的终点,通过事务,一次性提交所有更改,以确保数据的完整性和有效性。总而言之,UOW协调这些对象的持久化及并发问题。

定义工作单元接口:

 1 /// <summary>
 2 /// 工作单元接口
 3 /// </summary>
 4 public interface IUnitOfWork : IDisposable
 5 {
 6     /// <summary>
 7     /// 事务
 8     /// </summary>
 9     IDbTransaction DbTransaction { get; }
10     /// <summary>
11     /// 数据连接
12     /// </summary>
13     IDbConnection DbConnection { get; }
14
15     /// <summary>
16     /// 开启事务
17     /// </summary>
18     void BeginTransaction();
19     /// <summary>
20     /// 完成事务
21     /// </summary>
22     void Commit();
23     /// <summary>
24     /// 回滚事务
25     /// </summary>
26     void Rollback();
27 }

实现工作单元:

 1 /// <summary>
 2 /// 工作单元
 3 /// </summary>
 4 public class UnitOfWork : IUnitOfWork
 5 {
 6     private bool _disposed;
 7     private IDbTransaction _trans = null;
 8     /// <summary>
 9     /// 事务
10     /// </summary>
11     public IDbTransaction DbTransaction { get { return _trans; } }
12
13     private IDbConnection _connection;
14     /// <summary>
15     /// 数据连接
16     /// </summary>
17     public IDbConnection DbConnection { get { return _connection; } }
18
19     public UnitOfWork(IConfiguration configuration)
20     {
21         var connectionString = configuration.GetConnectionString("SqlConnection");
22         _connection = new MySqlConnection(connectionString); //这里使用的mysql
23         _connection.Open();
24     }
25
26     /// <summary>
27     /// 开启事务
28     /// </summary>
29     public void BeginTransaction()
30     {
31         _trans = _connection.BeginTransaction();
32     }
33     /// <summary>
34     /// 完成事务
35     /// </summary>
36     public void Commit() => _trans?.Commit();
37     /// <summary>
38     /// 回滚事务
39     /// </summary>
40     public void Rollback() => _trans?.Rollback();
41
42     public void Dispose()
43     {
44         Dispose(true);
45         GC.SuppressFinalize(this);
46     }
47
48     ~UnitOfWork() => Dispose(false);
49
50     protected virtual void Dispose(bool disposing)
51     {
52         if (_disposed)
53             return;
54         if (disposing)
55         {
56             _trans?.Dispose();
57             _connection?.Dispose();
58         }
59         _trans = null;
60         _connection = null;
61         _disposed = true;
62     }
63 }

在IServiceCollection容器中注册:

services.AddScoped<IUnitOfWork, UnitOfWork>();

源码地址:https://github.com/letnet/NetCoreDemo

.NetCore学习笔记:一、UnitOfWork工作单元相关推荐

  1. Python学习笔记——数据分析之工作环境准备及数据分析建模理论基础

    目录 <Linkedln:2016年中国互联网最热职位人才库报告> Python3.x 常用的新特性 字符串编码格式回顾: DIKW 体系 数据建模基础 <Linkedln:2016 ...

  2. Python学习笔记——openpyxl读取工作表的数据有效性设置信息

    今天在用openpyxl读取表格信息时,需要根据表格中单元格的数据有效性设置中的序列内容来进行下一步操作判断.但是对于如何获取该序列的字符串值一点也不了解,网上查找资料只找到用DataValidati ...

  3. Excel中VBA编程学习笔记(十)--单元格(cell)

    1.单元格引用 引用 含义 Range("A1") 单元格A1 Range("A1:B2") A1到B2的单元格区域 Range("C5:D9,G9: ...

  4. Android学习笔记View的工作原理

    自定义View,也可以称为自定义控件,通过自定义View可以使得控件实现各种定制的效果. 实现自定义View,需要掌握View的底层工作原理,比如View的测量过程.布局流程以及绘制流程,除此之外,还 ...

  5. 项目管理学习笔记之二.工作分解

    项目管理个人能力-- 计划分解的能力 在项目管理里面,计划分解是一种非常重要的能力和技术方法. 它的英文缩写叫做WBS, work breakdown structures,它是教会我们怎么样把一个复 ...

  6. excel学习笔记:数据格式,单元格格式(快捷键,自动调整行列宽,条件格式,自定义格式,日期星期时间的设置,特殊数字,多种填充方式,从下拉列表选择,数据验证。)

    文章目录 数据格式.单元格格式 1. 快捷键 2. 自动调整列/行宽 3. 条件格式 4. 日期设置 5. 星期设置 6. 时间设置 7. 特殊数字 8. 选中多个填充,ctrl选中,输入100,ct ...

  7. HFSS学习笔记—2.HFSS工作界面

    HFSS_HFSS工作界面介绍 1.HFSS工作界面的组成 菜单栏 工具栏 项目管理和工程树 属性窗口 信息管理窗口 进程窗口 状态栏 操作历史树和三维建模窗口 2.工作界面中各个工作窗口功能 1.主 ...

  8. SX1276/77/78学习笔记2 - sx1278工作方式

    1 . 概要 LoRa 的芯片一般有 端部分:SX1276 / SX1276 / SX1278 .网关使用的是 SX1301 . EML3047 使用的是 STM32L071 + SX1278 . L ...

  9. 西门子PLC学习笔记二-(工作记录)

    今天师傅给讲了讲做自己主动化控制的总体的思路,特进行一下记录,做个备忘. 1.需求分析 本次的项目是对楼宇循环供水的控制,整个项目须要完毕压力.压差.温度等的获取及显示.同一时候完毕电机的控制. 2. ...

最新文章

  1. 【组队学习】【29期】4. 吃瓜教程——西瓜书+南瓜书
  2. 网络设备Web登录检测工具device-phamer
  3. python培训班有用吗-比起自学Python,参加Python培训班有什么优势?
  4. 兼容IE678的placeholder
  5. 嫦娥五号完美落月,背后黑科技令人惊叹
  6. marlin 三角洲_带火花的三角洲湖:什么和为什么?
  7. 【数据结构算法】快排/归并/堆排序 c++
  8. 51nod1183编辑距离----DP--字符串最小变化
  9. IDEA报错解决:Cannot resolve com.oracle:ojdbc7:12.1.0.2或‘com.oracle:ojdbc7:12.1.0.2‘ not found
  10. 迅雷 故意限速_故意记录的价值
  11. 【Allwinner】---全志GPIO号 计算 最新最详细
  12. java架构师主要是干什么的,要注意什么?
  13. 软件开发人员的简历项目经验怎么写
  14. java面向对象题目_经典面向对象题,用Java做,要详细点的。
  15. 关于微信在线客服系统的实现(已经证实可用)
  16. 支付宝 手机页面支付 集成 出现 “系统繁忙,请稍后再试”
  17. 学 C 语言,最经典的书有这样几本
  18. Agilent安捷伦34401A|34461A|3458a数字万用表软件NS-Multimeter
  19. const、*、的大乱斗
  20. JAVA设计模式总结之23种设计模式(重点!!!)

热门文章

  1. matlab打开.mat文件
  2. 分页计算总页数的算法
  3. error:值不能为 null。\r\n参数名: oldValue
  4. oracle列转行求和,Oracle行转列和列转行
  5. WinRTP Programmer's Guide 翻译
  6. TCPMP 原代码分析1
  7. 机器学习:MixMatch 论文解读
  8. 良匠-手把手教你写NFT抢购软(五)
  9. 【信息系统项目管理师】第四章 整体管理思维导图
  10. ElasticSearch7.X和ElasticSearch8.X学习记录