Asp.Net Core工作单元UnitOfWork数据访问模式

.net core 2.0 autofac 使用工作单元UnitOfWork实现事务 1.新建IUnitOfWork接口,定义保存更改方法和释放方法namespace ET.BUA.Core.Abstraction.Uow{    #region 简化版    public interface IUnitOfWork : IDisposable    {        int SaveChanges();        void Dispose(bool disposing);  ... 阅读详情

一、开篇叙谈

有些同学可能会说我现在的项目毫无项目架构可言,是真的吗?为什么会出现这种疑问。

项目架构这个东西是不断的根据自己的实际业务来演变过来的,在这个前辈们探索的过程中,因此慢慢的提炼别总结出了一些经验(也就是设计思想),最后就形成了架构模式吧。

一切事物存在即合理,所以你的项目一定是有架构可言的,只是当前的这个架构可能无法更好的满足你业务要求了,你需要进行演变升级了哦。

二、何为项目架构分层

系统架构分层和项目架构分层的区别?

这两个从字面意思很容易混淆,但是这两个概念的确是两码事,希望大家能否分的清楚。

• 系统架构分层:站的角度是硬件(物理)层面(反向代理,正向代理,第三方中间件)。

• 项目架构分层:站的角度是软件(逻辑)层面(Code代码层面)。

三、经典的三层架构(3-Layer)优缺点

• 优点:分层简单,容易上手,是code monkey猴子都容易上手。

• 缺点:大量重复性的CRUD代码。

阿笨经常说的一句话:erverything is price 

一个新的东西的引入虽然解决了上一个存在的问题,但是也是有代价了,将会产生出新的问题。

顾名思义,三层架构分为三层,分别是“数据访问层”、“业务逻辑层”、“表示层”。

• 数据访问层(DAL):实现对数据库中数据的读取和保存操作。

• 业务逻辑层(BLL):它是DAL和UI层的连接桥梁.既然称作业务层,必然有他的用处,不仅仅是一个中转的功能。

阿笨给大家的建议要记住UI层面上的逻辑可以放在UI层,业务层面上的逻辑建议还是规范一点放在业务逻辑层。

业务逻辑层BLL到底有什么用?
https://www.cnblogs.com/Garden-blog/archive/2011/04/12/2013268.html

• 表示层(UI):主要功能是显示数据和接受传输用户的数据,例如Windows窗体和Web页面。

三、Repository仓储模式优缺点

1)、什么是仓储(Repository)是什么?

Repository;中文翻译为仓库,大家都知道仓库里面装了很多各种各样的东西,那么你需要东西只要从仓库里面拿去就可以了,你不用关系仓库里面的东西存放在具体的那个位置上。调用方不要问,也不需要知道,你只负责从里面拿(获取)即可。

一般结合ORM框架,比如EF,Dapper等等。因为这类的框架天生就具备了高度复用的CRUD特性功能。

• 优点:

1、CRUD达到了复用目的(把一些公共的调用数据库的方法剥离出来,减少冗余的代码)。

2、为业务开发(程序开发)提供统一的规范。大家编码都规范了,都按照标准的作业模式让仓库中放存放(编写代码)自己的东西了,用到的时候大家都可以互相借用(共用)。

• 缺点:    

1)、多个Repository之间怎么保存在一个事务单元内的操作?

三、UnitOfWork工作单元模式

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

只需要记住一点:当 Unit Of Work 中的 Commit() 方法执行时,所有仓库Repository中发生在对象上的修改都将提交到数据库中。

在Asp.net core 中 使用Dapper 和Repository Pattern模式开发WEB程序 Dapper是一个简单的对象映射框架或Micro ORM,它可以帮助我们有效地将数据从SQL查询的结果映射到.NET类,使用方法也非常简单,只需使用SQL客户端对象执行SQL Select语句,并将结果作为映射到C#的相应类并返回结果即可。与EF实体框架的性能相比,它在查询数据方面肯定更快,这在Dapper官方有专门的测试数据进行比较得出来的。因为Dapper直接使用RAW SQL,因此时间延迟非常小,从而提高了Dapper读取和写入的性能。 阅读详情

相关推荐

UnitOfWork:Microsoft.EntityFrameworkCore的一个插件,用于支持存储库,工作单元模式,支持具有分布式事务的多个数据库以及MySQL支持的多个数据库表分片

工作单位 Microsoft.EntityFrameworkCore的插件,用于支持存储库,工作单元模式以及支持分布式事务的多个数据库。 支持MySQL多个数据库/表分片 实际上,在MySQL中,模式与数据库同义。 您可以在MySQL SQL语法中用关键字SCHEMA代替DATABASE,例如,使用CREATE SCHEMA代替CREATE DATABASE。 其他一些数据库产品也有区别。 例如,在Oracle数据库产品中,模式仅代表数据库的一部分:单个用户拥有的表和其他对象。 因此,对于MySQL,支持此功能的简单方法是在运行时动态更改SCHEMA。 支持MySQL之后,同一台机器上的同一模型中的多个数据库/表分片。 对于不同的机器,可以使用DbContextFactory动态创建DbContext。 您可以使用来测试此功能。 @ 快速上手 如何使用UnitOfWork publ

.NetCore学习笔记:一、UnitOfWork工作单元

Maintains a list of objects affected by a business transaction and coordinates the writing out of changes and the resolution of concurrency problems.   Unit of Work--Martin Fowler Unit Of Work模式,由马丁大叔提出,是一种数据访问模式。UOW模式的作用是在业务用例的操作中跟踪对象的所有更改(增加、删除和更新),并将所..

whyrookie的博客 1268

UnitOfWork:NHibernate 或实体框架 C# 示例的工作单元抽象

工作单位 NHibernate 和实体框架 C# 示例的工作单元,根据文章: : 如果您想对其进行测试,只需创建电子商务数据库并运行“Customer table.sql”。 然后只需使用 SQL Server 跟踪工具并查看事务控制。

.net core2.x - 关于工作单元(UnitOfWork) 模式

概要:在搭建框架,顺手说下写下,关于unitofwork,可能你理解了,可能你还不理解,可能与不可能不是重点,重点是感兴趣就看看吧。 1.工作单元(unitofowork)是什么(后面简写uow)?   Maintains a list of objects affected by a business transaction and coordinates the writing o...

weixin_30709635的博客 849

西门子S7-200SMART控制步进电机(五)

前面详细讲述了运动控制向导的配置和运动控制指令的使用方法,接下来要讲的是简单程序的编写和调试。 在编写程序时,需要注意的是自定义的符号和地址不能与运动控制向导分配的存储器冲突。 一、软硬件组成 1、软件:STEP-7-Micro/WIN SMART软件; 2、硬件:西门子S7-200 SMART ST40 PLC、57步进电机和驱动器(DM542)。 二、手动控制步进电机旋转方向和速度 具体步骤...

qq_43134642的博客 2万+

智能座舱架构与芯片 - (3) 硬件篇 上

在了解智能座舱的基本架构之后,我们有必要针对智能座舱域的硬件平台,软件平台,SOC等进行逐一介绍。从它们的整体结构中去认识最新的智能座舱组成部件,以及主要功能等。如上图,是中央计算-区域控制架构下的智能座舱硬件平台框架图,其中,智能座舱控制器CDC挂载在以太网交换机上,与其他车控域VDC,自驾域ADC,网联设备5G+V2X等通过以太网实现数据交互。而智能座舱域的外部硬件设备还包含有连接子系统音频子系统摄像头子系统显示子系统存储子系统功能安全子系统等。

joanna_xiao的博客 2397

.NetCore基于SqlSugar的工作单元—UnitOfWork.NetCore基于SqlSugar和Aop的工作单元模式(UnitOfWork)实现

Unit Of Work模式,即工作单元,它是一种数据访问模式。所以在采用Unit Of Work模式好处就在于能够确保数据的完整性,如果在持有一系列业务对象(同属于一个事务)的过程中出现问题,就可以将所有的修改回滚,以确保数据始终处于有效状态,不会出现脏数据。由上面的例子可以看到,_studentRepository 和 _teacherRepository 两个仓储分别进行了添加操作,但是他们实际是在一个事务中进行的,所以如果出现异常,事务中的所有操作都会回滚,从而达到操作原子性。

qq_60147611的博客 1823

用51单片机和LD3320语音模块DIY一个会说话的温度报警器(附完整代码)

本文详细介绍了如何使用51单片机和LD3320语音模块DIY一个智能温度报警器,包括硬件选型、电路设计、软件开发及核心功能实现。通过DS18B20温度传感器和语音模块的结合,实现温度超标时的语音报警功能,适合智能家居系统等应用场景。附完整代码,方便开发者快速复现。

weixin_42525632的博客 419

【.Net设计模式系列】工作单元(Unit Of Work)模式 ( 二 )

【.Net设计模式系列】工作单元(Unit Of Work)模式 ( 二 ) 回顾 在上一篇博客【.Net设计模式系列】仓储(Repository)模式 ( 一 )  中,通过各位兄台的评论中,可以看出在设计上还有很多的问题,在这里特别感谢 @横竖都溢 @ 浮云飞梦 2位兄台对博文中存在的问题给予指出,并提供出好的解决方案,同时也感谢其他园友的支持。欢迎各位园友对博文中出现的错误或者是设计误区...

xiaoguan_liu的博客 3322

Win11下Edge浏览器CPU占用飙升?试试这5个隐藏设置(附实测对比图)

本文详细解析了Win11下Edge浏览器CPU占用飙升的原因,并提供了5个关键设置优化方案,包括禁用硬件加速、管理扩展程序等,有效降低资源消耗。实测数据显示优化后CPU占用显著下降,适合Win11用户提升浏览器性能。

weixin_29266679的博客 1503

AnolisOS网卡驱动源码编译与安装实战指南

本文提供了一份详尽的AnolisOS网卡驱动源码编译与安装实战指南。针对系统自带通用驱动不兼容导致网络无法使用的问题,文章从环境准备、源码获取、编译安装到新旧驱动替换与持久化配置,一步步解析了如何通过源码编译安装官方驱动,解决硬件兼容性问题,并确保驱动在系统重启后自动生效。

weixin_28358083的博客 304

ASP.NET Core搭建多层网站架构【4-工作单元和仓储设计】

ASP.NET Core搭建多层网站架构【4-工作单元和仓储设计】 2020/01/28, ASP.NET Core 3.1, VS2019, Microsoft.EntityFrameworkCore.Relational 3.1.1 摘要:基于ASP.NET Core 3.1 WebApi搭建后端多层网站架构【4-工作单元和仓储设计】 使用泛型仓储(Repository)和工作单元(UnitOfWork)模式封装数据访问层基础的增删改查等方法 文章目录 此分支项目代码 关于本章节的工作单元

月亮哥的专栏 1146

Linux Kernel入门到精通系列讲解(RV-Kernel 篇) 5.5 RTC设备编写与实现

4. Linux kernel RTC子系统goldfish_rtc driver分析。电脑,会需要时间,还比如 我们的手机、平板,都需要时间;驱动基本就是应用层需要什么数据你给什么数据就行,基本必须实现的就是。3.2 Linux kernel RTC 设备描述符讲解。中看到他的具体实现,也可以根据他的寄存器描述直接在。5. 将驱动添加进kernel和测试RTC驱动。系统来说,时间是一个非常重要的功能;之类的函数接口,接下来我们就开始讲解如何写。,所以我们直接移植设备树即可。,他的寄存器很简单,你可以从。

DSMGUOGUO的博客 568

FreeSql仓储模式实战:Repository + UnitOfWork最佳实践

FreeSql作为.NET领域功能强大的ORM框架,其仓储模式和UnitOfWork工作单元设计为开发人员提供了优雅的数据访问解决方案。这套架构不仅简化了数据操作,还确保了事务的一致性和数据的安全性。🚀 ## 什么是仓储模式与UnitOfWork? 仓储模式(Repository Pattern)是一种数据访问抽象层,它将数据访问逻辑与业务逻辑分离。而UnitOfWork(工作单元)则负责管

gitblog_01019的博客 507

当AI学会写“自传”:OpenClaw 的 SOUL.md 如何把配置文件变成一颗会变形的心

SOUL.md。

步子哥的博客 1308

华为OD机试双机位C卷-几何平均值最大子数组(Py/Java/C/C++/Js/Go)

华为OD机试(机考)2026双机位C卷 【几何平均值最大子数组】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【几何平均值最大子数组】。

qq_45776114的博客 1366

Arch.EntityFrameworkCore.UnitOfWork实战案例:构建企业级数据访问层

Arch.EntityFrameworkCore.UnitOfWork是一个为Microsoft.EntityFrameworkCore设计的插件,它支持仓储模式、工作单元模式,并且能够处理多数据库和分布式事务,同时还支持MySQL的多数据库/表分片功能。这个强大的工具可以帮助开发者轻松构建企业级数据访问层,提高代码的可维护性和可扩展性。 ## 什么是工作单元模式? 工作单元模式(Unit o

gitblog_01039的博客 638

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Asp.Net Core 工作单元 UnitOfWork UOW

Asp.Net Core 工作单元示例 来自 ABP UOW 去除所有无用特性 代码下载 : 去除所有无用特性版本,原生AspNetCore实现 差不多 2278 行代码: 链接:https://pan.baidu.com/s/1NoEIDSAPNr46xNHYEx9KCA 提取码:570i 包含Castle.Windsor.MsDependenc...

weixin_30954265的博客 1239

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

.NET三大框架设计模式全解析

本文探讨了.NET生态系统中三大主流框架(ASP.NET Core、Entity Framework和WPF)的设计模式应用。在ASP.NET Core中,重点介绍了依赖注入模式降低耦合度、中介者模式解耦请求处理、管道模式构建灵活中间件流程以及选项模式管理配置。Entity Framework Core部分分析了仓储模式封装数据访问逻辑和工作单元模式管理事务一致性的实现方式。这些模式显著提高了代码的可维护性、可扩展性和可测试性,为.NET开发者提供了经过验证的最佳实践方案。

冰茶的博客 2031

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

C# ASP.NET UnitOfWork 模式:搞定多表事务一致性,避开 90% 的坑

小节:用 “超市购物” 理解 UnitOfWork先抛掉技术术语,用生活场景类比:你去超市购物时,不会拿一件商品就去结账(对应:单表操作),而是把牛奶、面包、水果都放进购物车(对应:多表操作),确认所有商品都选好后,再一次性去收银台结账(对应:事务提交)。把一组相关操作封装成 “一个工作单元”,要么全部成功,要么全部失败。核心定义UnitOfWork(工作单元)是一种设计模式,核心作用是:1.跟踪多个数据操作(新增 / 修改 / 删除)的状态;

William_cl的博客 1185

【无私分享:ASP.NET CORE 项目实战(第五章)】Repository仓储 UnitofWork

目录索引  【无私分享:ASP.NET CORE 项目实战】目录索引 简介   本章我们来创建仓储类Repository 并且引入 UnitOfWork 我对UnitOfWork的一些理解   UnitOfWork 工作单元,对于这个的解释和实例,网上很多很多大神之作,我在这就不班门弄斧了,只是浅谈 一下个人理解,不一定对,希望大家...

351

ASP.NET Core 2.2 WebApi 系列【七】泛型仓储模式和工作单元

在之前的泛型仓储模式实现中,每个增删改都调用了SaveChanges方法,导致每次更新都提交了事务。 在实际开发过程中,我们经常遇到同时操作多张表数据,那么按照之前的写法,对数据库提交了多次操作,开启了多事务,不能保证数据的一致性,结合工作单元(UnitOfWork)是为了把多次操作放到同一事务中,要么都成功(Commit),要么都失败(Rollback),保证了数据的一致性。 修改仓...

936

UnitOfWork插件使用教程

UnitOfWork是针对Microsoft Entity Framework Core设计的一个插件,旨在支持仓储单元工作模式,特别增强了对多数据库操作的支持,包括分布式事务处理能力。此外,该项目还特地加入了MySQL环境下对多数据库和表分片的支持。该模式由Martin Fowler提出,用于在业务事务中追踪并管理对象的所有变更,确保在事务结束时能够一次性提交所有修改,保持数据的一致性和完整性。...

gitblog_00554的博客 608

DDD聚合在 ASP.NET Core中的实现

比如实体类和数据表具有直接的对应关系,实体类中属性和数据表中的列几乎完全一致。应该不考虑数据库实现的情况下进行领域模型建模,然后再使用Fluent API等对实体类和数据库之间做适配。在实现的时候,可能需要对建模进行妥协性修改,但是这不应该在最开始被考虑。如果一个微服务中有多个聚合根,那么是每个聚合根的实体放到一个单独的上下文中,还是把所有实体放到同一个上下文中?各自的优缺点是什么?定义一个不包含任何成员的标识接口,比如IAggregateRoot,然后要求所有的聚合根实体类都实现这个接口。

Anoxia_li的博客 736

深入理解Asp.Net-Core-Inventory-Order-Management-System中的仓储模式实现

Asp.Net-Core-Inventory-Order-Management-System是一个基于Asp.Net Core Mvc实现的库存订单管理系统,它涵盖了仓库、产品、供应商、客户、采购订单、销售订单、发货、收货等多个功能模块。在这个系统中,仓储模式的实现为数据访问层提供了清晰的结构和强大的功能支持。 ## 仓储模式概述:什么是仓储模式及其重要性 仓储模式(Repository Pa

gitblog_00924的博客 326

【asp.net core 系列】9 实战之 UnitOfWork以及自定义代码生成

0. 前言 在前一篇中我们创建了一个基于EF的数据查询接口实现基类,这一篇我将带领大家讲一下为这EF补充一些功能,并且提供一个解决避免写大量配置类的方案。 1. SaveChanges的外移 在之前介绍EF Core的时候,我们提到过使用EF需要在每次使用之后,调用一次SaveChanges将数据提交给数据库。在实际开发中,我们不能添加一条数据或者做一次修改就调用一次SaveChanges,这完全不现实。因为每次调用SaveChanges是EF向数据库提交变更的时候,所以EF推荐的是每次执行完用户的请求之后

菜鸡成长日记 2000
上一篇: WinForm通用自动更新器AutoUpdater项目实战
下一篇: NoSQL文档型存储数据库—MongoDB
跟着阿笨一起玩NET
博客等级 码龄9年 47粉丝 112原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值