使用工作单元UnitOfWork实现事务
生活随笔
收集整理的這篇文章主要介紹了
使用工作单元UnitOfWork实现事务
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
概述
工作單元模式有如下幾個特性:1、使用同一上下文2、跟蹤實體的狀態3、保障事務一致性。工作單元用來維護一個由已經被業務事物修改的業務對象組成的列表。Unit ?Of Work模式負責協調這些修改的持久化工作以及所有標記的并發問題。在數據訪問層中采用Unit Of Work模式帶來的好處是能夠確保數據完整性。如果在持久化一系列業務對象(他們屬于同一個事物)的過程中出現問題,那么應該將所有的修改回滾,以確保數據始終處于有效狀態。
主要代碼實現
1、定義接口,實現構造函數
??public?UnitOfWork(TDbContext?context){_dbContext?=?context????throw?new?ArgumentNullException(nameof(context));_repositories?=?new?Dictionary<string,?dynamic>();}public?void?Dispose(){Dispose(true);GC.SuppressFinalize(this);}public?virtual?void?Dispose(bool?disposing){if?(_disposed)return;if?(disposing){if?(_dbContext?!=?null){_dbContext.Dispose();_dbContext?=?null;}}_disposed?=?true;}2、定義SaveChanges和SaveChangesAsync保存方法
???public?int?SaveChanges(){return?_dbContext.SaveChanges();}public?Task<int>?SaveChangesAsync(){return?_dbContext.SaveChangesAsync();}3、使用工作單元添加數據,最后提交_unitOfWork.SaveChanges()
???private?readonly?IUnitOfWork?_unitOfWork;public?void?Add(ApplicationEntity?app){//todo_unitOfWork.SaveChanges();}問題
這種方式其實是在最后的時候在一次性提交,因此對于自增長ID是無法提前知道的,所以如果事務內包含第二步依賴第一步的id的,建議可以使用其他類型的id來代替關聯。
總結
以上是生活随笔為你收集整理的使用工作单元UnitOfWork实现事务的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 毕业二十年,为什么人和人之间的差距那么大
- 下一篇: 宠粉老鱼皮带你 “入坑” GitHub!