本节目录
- <李>
介绍
李> <李>分析Abp源码
李> <李>实现UOW
李>,
介绍
UOW(全称UnitOfWork)是指工作单元。
在Abp中,工作单元对于仓储和应用服务方法默认开启。并在一次请求中,共享同一个工作单元。
同时在Abp中,不仅支持同一个数据库连接,还支持事务处理。
,
分析Abp源码
1。UnitOfWorkRegistrar
,
2。ComponentRegistered
,
,
3。IsConventionalUowClass
,
,
4。拦截
,
,
5。PerformSyncUow
,
,
,
实现UOW
定义IUnitOfWork 1
3
4 5 6
7 8 9
10 11 12
<代码>公共代码>,<代码>界面代码>,<代码> IUnitOfWork 代码>
<代码>{代码>
<代码>,,,,代码> <代码>//1。开启事务代码>
<代码>,,,,代码> <代码>//2。设置过滤器(本例中不做演示)代码>
<代码>,,,,代码> <代码>空白代码>,<代码>开始(UnitOfWorkOptions选项);代码>
<代码>,,,,代码> <代码>空白代码>,<代码>完成();代码>
<代码>}代码>
<代码>公共代码>,<代码>类代码>,<代码> UnitOfWorkOptions 代码>
<代码>{代码>
<代码>,,,,代码> <代码>公共代码>,<代码> bool 代码> <代码> ?IsTransactional{, 代码> <代码> 代码> <代码>;,代码> <代码> 代码> <代码>;}代码>
<代码>}代码>
,
实现uow,在uow中会提供db的创建,这样才能管理到每个db。
3
4 5 6
7 8 9
10 11 12
13 14
15
16日17日
18 19 20
21日22日23
24日25日26
27 28 29
30 31日
32 33
34 35
36 37
38 39 40
42 41
43 44
45 46 47
<代码>公共代码>,<代码>类代码>,<代码> EfUnitOfWork: UnitOfWorkBase 代码>
<代码>{代码>
<代码>,,,,代码> <代码>公共代码>,<代码>静态代码>,<代码> DbContext DbContext{, 代码> <代码> 代码> <代码>;,代码> <代码> 代码> <代码>;}代码>
<代码>,,,,代码> <代码>公共代码>,<代码>静态代码>,<代码> DbContext GetDbContext() 代码>
<代码>,,,,代码> <代码>{代码>
<代码>,,,,,,,,代码> <代码>如果代码>,<代码> (DbContext==, 代码> <代码>空代码> <代码>)代码>
<代码>,,,,,,,,代码> <代码>{代码>
<代码>,,,,,,,,,,,,代码> <代码> DbContext=, 代码> <代码>新代码>,<代码> DemoDb(); 代码>
<代码>,,,,,,,,代码> <代码>}代码>
<代码>,,,,,,,,代码> <代码>返回代码>,<代码> DbContext; 代码>
<代码>,,,,代码> <代码>}代码>
<代码>,,,,代码> <代码>公共代码>,<代码>覆盖代码>,<代码>空白代码>,<代码>开始(UnitOfWorkOptions选项)代码>
<代码>,,,,代码> <代码>{代码>
<代码>,,,,,,,,代码> <代码>如果代码>,<代码>(选项。IsTransactional==, 代码> <代码>对代码> <代码>)代码>
<代码>,,,,,,,,代码> <代码>{代码>
<代码>,,,,,,,,,,,,代码> <代码> CurrentTransaction=, 代码> <代码>新代码>,<代码> TransactionScope(); 代码>
<代码>,,,,,,,,代码> <代码>}代码>
<代码>,,,,代码> <代码>}代码>
<代码>,,,,代码> <代码>公共代码>,<代码> TransactionScope CurrentTransaction{, 代码> <代码> 代码> <代码>;,代码> <代码> 代码> <代码>;null