# RepositoryUnitOfWork
**Repository Path**: ldhnet/RepositoryUnitOfWork
## Basic Information
- **Project Name**: RepositoryUnitOfWork
- **Description**: 基于DotNet6.0的仓储实现
1、 隔离上下文,提供统一的操作方法(CRUD)
2、为业务开发(程序开发)提供统一的规范
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 2
- **Forks**: 0
- **Created**: 2018-03-15
- **Last Updated**: 2022-09-29
## Categories & Tags
**Categories**: Uncategorized
**Tags**: dotNET
## README
通用的Repository of UnitOfWork
# Repository
Generic EFCore6.0 Repository of UnitOfWork
# 简介
Entities 实体类
UnitOfWork 工作单元 事务开启、提交、回滚
DefaultDbContext.cs EF 链接数据库
IRepository.cs 仓储接口
Repository.cs 仓储实现
# 1、仓储(Repository)是什么?
看下翻译:仓库; 贮藏室; 博物馆; 亲信;(百度翻译),说他是亲信?怎么理解?我们在初始化上下文之后,访问数据库的操作就是由他操作的,提供数据库的增删改查操作,它的存在 起到了 承上启下的作用 ,承上:隔离了业务直接访问上下文对象;启下:
业务操作,用它提供CRUD操作。
所以简要概括就是这几点:
a) 隔离上下文,提供统一的操作方法(CRUD)。
b)为业务开发(程序开发)提供统一的规范。
# 2、工作单元(unitofwork)是什么(后面简写uow)?
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
uow是这个老兄(马丁)提出的,上面是他说的话,这里要注意的就是分两个时间点,a)业务操作过程中,对操作的CUD操作的对象的状态进行跟踪操作; b) CUD操作完必经的一步骤当然是提交到数据库,uow保证业务提交使用同意上下文对象,从而保证了事务的一致性,假设提交失败直接回滚。
简单说:uow可以说是一个开关,开:用于上下文的获取,供所有的仓储对象使用;关:提交操作,提交的过程包含事务控制(是否会滚)。
所以他这一句话我们可以明确这几个东西:
①:一个对象用于存放 业务操作的对象(我们结合仓储使用就是仓储了) repository的临时存储对象;
②:同一业务操作的上下文必须保持一致(同一上下文对象)
3 :维护当前业务的变更操作(微软自带输入法打不出来圆圈三,,,,)
④:事务控制
# 3、UOW和Repository有啥关系?
# 一,repository模式
从概念上讲,Repository是把一个数据存储区的数据给封装成对象的集合并提供了对这些集合的操作。
Repository的共同性
有一些公共的方法(增删改查), 这些方法无关于Repository操作的是哪个实体类,可以把这些方法定义成接口IRepository,然后有个基类BaseRepository实现该接口的方法。常见的方法,比如Find, Filter, Delete, Create等
Repository的差异性
每个Repository类又会有一些差异性,应当允许它们能够继承BaseRepository之外,还能够再扩展自己的一些方法。所以每个类都可以再定义一个自己特有的接口,定义一些属于自 己Repository的方法。
Repository的协同性
不同的Repository可能需要协同,Repository对数据的修改,需要在统一的保存.
# 二,UnitOfWork模式
描述和作用:
简说了,主要作用是在数据持久化过程中,数据提,确保数据的完整性,对象使用确保同一上下文对象。如果有异常,提供回滚。
# 三,二者的关系
即:工作单元服务于仓储,并在工作单元中初始化上下文,为仓储单元提供上下文对象,由此确保同一上下文对象。