日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

Asp.Net Core 工作单元 UnitOfWork UOW

發布時間:2023/12/13 asp.net 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Asp.Net Core 工作单元 UnitOfWork UOW 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Asp.Net Core 工作單元示例 來自 ABP UOW 去除所有無用特性

?


?

代碼下載 :

去除所有無用特性版本,原生AspNetCore實現 差不多 2278 行代碼:

? ? 鏈接:https://pan.baidu.com/s/1NoEIDSAPNr46xNHYEx9KCA
? ? 提取碼:570i

包含Castle.Windsor.MsDependencyInjection + 方法攔截器(Interceptor) 代理版本(Proxy)

? ? 鏈接:https://pan.baidu.com/s/1iL7PHofu3n0IKo_N5BEJhw
? ? 提取碼:i1m7


?

1. 什么叫工作單元?

?

跨多個請求的業務,統一管理事務,統一提交。

?

2. 為什么要工作單元?

?我們經常的代碼都是分層的,有可能到處都在 new DbContext(options),這是就要面對如何管理這些DbContext,在AspNetCore中 services.AddDbContext<>默認是用的Scope的作用域,也就是每次HttpRequest,比以前好了很多。但是事務這些管理還是很麻煩。

?

?如上圖 有一個Action需要調用很多Service 然后 Service之間又相互調用,在開啟Action時 其實是想開啟一個事務,但是某些內部代碼有可能自己去開啟了事務。相互之間調用管理起來非常麻煩。經常出現不可估計的問題。如果有一個集中管理的地方就好很多。比如在Action這里啟動一個工作單元,后續所有的業務都使用同一個事務 和 DbContext,這才是我們的預期的。

?

3. 如何使用工作單元?

http://www.aspnetboilerplate.com/Pages/Documents/Unit-Of-Work

?

//[UnitOfWork(IsDisabled = true)]//添加工作單元配置public async Task<IActionResult> GetSystemInitSettings(){var defaultUsers = _dbContext.Users.Take(5).ToList();//以前的方式 注冊的DbContext//測試1 獲取DbContextvar dbContext = _dbContextProvider.GetDbContext();//IsolationLevel.ReadUncommitted//獲取數據測試var users = dbContext.Users.Take(5).ToList();var importDataTask = ImportDataTask.CreateTask("test1", "1", "userName", Entities.Enum.ImportDataType.無效導入, "", "", 0, "", "");dbContext.ImportDataTasks.Add(importDataTask);//1.如果調用當前_unitOfWorkManager.Current.SaveChanges();//可以保存到數據庫,但是如果UOW不提交則會因為事務回滾,這種情況可以先獲取到數據的ID//** 因為是 事務提交 但是后面還有業務 數據庫查詢會Loading//測試環境2using (var uow2 = _unitOfWorkManager.Begin(TransactionScopeOption.RequiresNew))//要求開啟一個新的工作單元 {var newDbContext = _dbContextProvider.GetDbContext();var importDataTask2 = ImportDataTask.CreateTask("test2", "2", "userName", Entities.Enum.ImportDataType.無效導入, "", "", 0, "", "");newDbContext.ImportDataTasks.Add(importDataTask2);using (var uow3 = _unitOfWorkManager.Begin(new UnitOfWorkOptions{Scope = TransactionScopeOption.Required}))//要求開啟一個新的工作單元 Required 這里不會開啟一個新的UOW {var innerDbContext = _dbContextProvider.GetDbContext();if(innerDbContext == newDbContext){;//相同DbContext }}uow2.Complete();//直接優先提交到數據庫 }await Task.CompletedTask;// throw new Exception();//異常 默認UOW 會回滾 如果不異常保存到數據庫,或者異常被捕獲

?

4. 項目結構和依賴項?

?

轉載于:https://www.cnblogs.com/herenwei-wayne/p/10343024.html

總結

以上是生活随笔為你收集整理的Asp.Net Core 工作单元 UnitOfWork UOW的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。