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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/249694.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/249694.shtml
英文地址,請注明出處:http://en.pswp.cn/news/249694.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

網站性能優化--CRP

網站性能優化–CRP 為了把HTML、CSS和JavaScript轉化成活靈活現、絢麗多彩的網頁&#xff0c;瀏覽器需要處理一系列的中間過程&#xff0c;優化性能其實就是了解這個過程中發生了什么-即CRP(Critical Rendering Path&#xff0c;關鍵渲染路徑)。首先&#xff0c;我們從頭開始快…

Dubbo+zookeeper基礎講解

一、dubbo是什么&#xff1f; 1&#xff09;本質&#xff1a;一個Jar包,一個分布式框架,&#xff0c;一個遠程服務調用的分布式框架。 既然是新手教學&#xff0c;肯定很多同學不明白什么是分布式和遠程服務調用&#xff0c;為什么要分布式&#xff0c;為什么要遠程調用。我簡…

What Are You Talking About HDU1075

一開始我也想用map 但是處理不好其他字符。。 看了題解 多多學習&#xff01; 很巧妙 就是粗暴的一個字符一個字符的來 分為小寫字母和非小寫字母兩個部分 一但單詞結束的時候就開始判斷。 #include<bits/stdc.h> using namespace std;int main() {string a,b;map&l…

開通博客第一天

今天是開通博客第一天&#xff0c; 第一次寫博客&#xff0c;也不知道寫什么&#xff0c; 以后寫點技術文&#xff0c;把我的經驗分享給大家&#xff0c; 不對的地方請大家指正&#xff0c;一起進步。我要把我每遇到的難題以及學到的知識和技術為大家踩坑&#xff0c; 做研究。…

學習File API用于前端讀取文件

1. File API簡介 File API對于某些專門的網站的不可或缺的。現在常用它實現對文件的預覽等功能。 File API規定怎么從硬盤上提取文件&#xff0c;直接交給在網頁中運行中的Javascript代碼。然后代碼可以打開文件探究數據&#xff0c;無論是本地文件還是其他文件。注意&#x…

kafka筆記1

Kafka是一款基于發布和訂閱的消息系統。一般被稱為分布式提交日志或分布式流平臺。 Kafka系統是按照一定的順序持久化保存的&#xff0c;可以按需讀取。 Kafka的數據單元被稱為消息。類似于數據庫中表的一行記錄&#xff0c;消息由字節組成&#xff0c;所以沒有特別的格式和含義…

Dubbo入門教程

服務端&#xff08;dubbo-server&#xff09; 1. pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaL…

NSAssert和NSParameterAssert

2016.05.05 18:34* 字數 861 閱讀 5127評論 0喜歡 17https://www.jianshu.com/p/3072e174554fNSAssert和NSParameterAssert在開發環境中經常被使用&#xff0c;調試和驗證代碼參數的完整性&#xff0c;斷言為真&#xff0c;則表明程序運行正常&#xff0c;而斷言為假&#xff0…

【PAT】B1070 結繩(25 分)

此題太給其他25分的題丟人了&#xff0c;只值15分 注意要求最終結果最長&#xff0c;而且向下取整 #include<stdio.h> #include<algorithm> using namespace std; float arr[10005]; int main(){int N;scanf("%d",&N);for(int i0;i<N;i)//輸入數據…

Java代碼實現負載均衡五種算法

前言&#xff1a; 負載均衡是為了解決并發情況下&#xff0c;多個請求訪問&#xff0c;把請求通過提前約定好的規則轉發給各個server。其中有好幾個種經典的算法。在用java代碼編寫這幾種算法之前&#xff0c;先來了解一下負載均衡這個概念。 1.概念 負載&#xff0c;從字面…

使用Nodejs發送郵件

嘗試用了Nodemailer來發送郵件&#xff0c;結果成功了&#xff0c;雖然是相對比較簡單的&#xff0c;但還是記錄一下吧。 Nodemailer 是 Node.js 應用程序的一個模塊&#xff0c;可以方便地發送電子郵件。 使用 # 初始化 pageage.json 文件 $ npm init # 安裝依賴 $ npm ins…

HTTP同源策略

同源策略是web安全策略中的一種&#xff0c;非常重要。 同源策略明確規定&#xff1a;不同域的客戶端在沒有明確授權的情況下&#xff0c;不能讀寫對方的資源。 簡單說來就是web瀏覽器允許第一個頁面的腳本訪問訪問第二個頁面的數據&#xff0c;但是也只有在兩個頁面有相同的…

Spring Cloud 微服務架構

一、分布式服務框架的發展 1.1 第一代服務框架   代表&#xff1a;Dubbo(Java)、Orleans(.Net)等 特點&#xff1a;和語言綁定緊密 1.2 第二代服務框架   代表&#xff1a;Spring Cloud等 現狀&#xff1a;適合混合式開發&#xff08;例如借助Steeltoe OSS可以讓ASP.Ne…

JZOJ 4421. aplusb

4421. aplusb Time Limits: 1000 ms Memory Limits: 524288 KB Detailed Limits Goto ProblemSetDescription SillyHook要給小朋友出題了&#xff0c;他想&#xff0c;對于初學者&#xff0c;第一題肯定是ab 啊&#xff0c;但當他出完數據后神奇地發現.in不見了&#xff0c…

跨域資源共享CORS詳解

最近深入了解了CORS的相關東西&#xff0c;覺得阮一峰老師的文章寫得最詳細易懂了&#xff0c;所有轉載作為學習筆記。 原文地址&#xff1a;跨域資源共享 CORS 詳解 CORS是W3C的一個標準&#xff0c;全稱是跨域資源共享&#xff08;Cross-origin resource sharing&#xff0…

計算機網絡(十),HTTP的關鍵問題

目錄 1.在瀏覽器地址欄鍵入URL&#xff0c;按下回車之后經歷的流程 2.HTTP狀態碼 3.GET請求和POST請求的區別 4.Cookie和Session的區別 5.IPV4和IPV6 十、HTTP的關鍵問題 1.在瀏覽器地址欄鍵入URL&#xff0c;按下回車之后經歷的流程 &#xff08;1&#xff09;DNS解析 &#x…

云技術

云技術是指在廣域網或局域網內將硬件、軟件、網絡等系列資源統一起來&#xff0c;實現數據的計算、儲存、處理和共享的一種托管技術。

vue中 mock使用教程

//mock/index.js import Mock from mockjs //引入mockjs&#xff0c;npm已安裝 import { Random,toJSONSchema } from mockjs // 引入random對象,隨機生成數據的對象&#xff0c;&#xff08;與占位符一樣&#xff09; Mock.setup({timeout:1000 //設置請求延時時間 }) const …

前端開發掌握nginx常用功能之rewrite

上一篇博文對nginx最常用功能的server及location的匹配規則進行了講解&#xff0c;這也是nginx實現控制訪問和反向代理的基礎。掌握請求的匹配規則算是對nginx有了入門&#xff0c;但是這些往往還是不能滿足實際的需求場景&#xff0c;例如請求url重寫、重定向等等&#xff0c;…

vue2.0腳手架的webpack 配置文件分析

前言 作為 Vue 的使用者我們對于 vue-cli 都很熟悉&#xff0c;但是對它的 webpack 配置我們可能關注甚少&#xff0c;今天我們為大家帶來 vue-cli#2.0 的 webpack 配置分析 vue-cli 的簡介、安裝我們不在這里贅述&#xff0c;對它還不熟悉的同學可以直接訪問 vue-cli 查看 …