自研ORM框架实现工作单元模式
平时我们使用事务,需要显示的Try Catch 并且开启事务 提交事务 异常回滚事务 三步骤,使用工作单元后则只需要Commit。
1.接口定义
1 ///2 /// 工作单元接口类 3 /// 4 public interface IUnitOfWork : IDisposable 5 { 6 /// 7 /// 是否提交 8 /// 9 bool IsCommit { get; } 10 11 /// 12 /// 数据库上下文 13 /// 14 IDbContext Db { get; } 15 16 /// 17 /// 提交 18 /// 19 /// 20 bool Commit(); 21 }
2.接口实现
1 ///2 /// 工作单元实现类 3 /// 4 public class UnitOfWork : IUnitOfWork 5 { 6 /// 7 /// 释放 8 /// 9 private bool disposed = false; 10 11 /// 12 /// 是否提交 13 /// 14 public bool IsCommit { get; private set; } 15 16 /// 17 /// 数据库上下文 18 /// 19 public IDbContext Db { get; } 20 21 /// 22 /// 构造方法 23 /// 24 /// 数据库上下文 25 public UnitOfWork(IDbContext db) 26 { 27 this.Db = db; 28 this.Db.BeginTranAsync().Wait(); 29 } 30 31 /// 32 /// 提交 33 /// 34 /// 35 public bool Commit() 36 { 37 if (!IsCommit) 38 { 39 this.Db.CommitTranAsync().Wait(); 40 IsCommit = true; 41 } 42 return IsCommit; 43 } 44 45 /// 46 /// 释放 47 /// 48 public void Dispose() 49 { 50 Dispose(true); 51 GC.SuppressFinalize(this); 52 } 53 54 /// 55 /// 释放 56 /// 57 /// 释放标记 58 protected virtual void Dispose(bool disposing) 59 { 60 if (!this.disposed) 61 { 62 if (disposing) 63 { 64 if (!IsCommit) 65 { 66 this.Db.RollbackTranAsync().Wait(); 67 } 68 } 69 disposed = true; 70 } 71 } 72 73 /// 74 /// 析构函数 75 /// 76 ~UnitOfWork() 77 { 78 Dispose(false); 79 } 80 }
3.使用方式
1.注册服务
1 // Add DbContext Service 2 builder.Services.AddFastDbContext(); 3 // Add UnitOfWork Service 4 builder.Services.AddFastUnitOfWork();
2.构造方法注入 UnitOfWork 对象使用时 无需显示using 当发生异常时会自动调用 Dispose 方法
////// 构造方法 /// /// public ValuesController(ILogger logger,IUnitOfWork unitOfWork) { this.logger = logger; this.unitOfWork = unitOfWork; } [HttpGet] public async Taskstring> TestUnitOfWork() { var result1 = await unitOfWork.Db.Insert(new Category() { CategoryName = "类别3" }).ExceuteAsync(); var result2 = await unitOfWork.Db.Insert(new Product() { ProductCode = "测试工作单元_111", }).ExceuteAsync(); unitOfWork.Commit(); return "工作单元执行完成..."; }
本文来自博客园,作者:China-Mr-zhong,转载请注明原文链接:https://www.cnblogs.com/China-Mr-zhong/p/17008000.html
文章来源于互联网:自研ORM框架实现工作单元模式
THE END
二维码