说说IUnitOfWork~认识IUnitOfWork,为什么要出现IUnitOfWork接口
第一讲 认识IUnitOfWork,为什么要出现IUnitOfWork接口第二讲 Linq to Sql与EntityFrameworks中的SubmtChanges()发生了什么事第三讲 方法完整性与统一提交不冲突第四讲 DbContext对象的创建应该向BLL层公开第五讲 我的IUnitOfWork+Repository架构
今天愉点时间,说说IUnitOfWork,它事实上是NHibernate上的东西,这里只是借一下它的思想,把咱们的EF和LinqToSql也优化一下,呵呵!对于IUnitOfWork它的中文是操作单元的意思,顾名思义,就是将多个操作放在一个单元中,把操作原子化,概念上有点像事务,但事实上并不是,它主要是指对数据库通信来说,统一完成一次提交,这对于优化系统的性能是非常必要的,接下来,我会分5讲来说明一下IUnitOfWork。
一 认识IUnitOfWork
我们一般对IUnitOfWork接口会定义如下元素:
/// <summary> /// 工作单元 /// 提供一个保存方法,它可以对调用层公开,为了减少连库次数 /// </summary> public interface IUnitWork { /// <summary> /// 直接提交到数据库 /// </summary> void Save(); /// <summary> /// 是否不提交到数据库,默认值设为false,即提交到数据库 /// 它通常于数据上下文基类去实现 /// </summary> /// <returns></returns> bool IsNotSubmit { get; set; } }
而这个接口往往由数据上下文去实现,我以entityframeworks为例,当你建立一个EDMX数据模型后,你可以再建立一个类文件来作为它的分部类,并实现IUnitWork接口,代码如下:
namespace Domain.Entities { public partial class backgroundEntities : Domain.Core.IUnitWork { #region IUnitWork 成员 public void Save() { this.SaveChanges(); } public bool IsNotSubmit { get; set; } #endregion } }
而对于调用方来说,它通常是在具体的Repository类中去实现的,最常见的就是“构造器注入”的方式,看代码:
事实上,在建立OrderRepository实例时,需要将实现了IUnitWork接口的数据上下文对象传进来,然后统一进行操作。在BLL层调用DAL层时,你可以将多个DAL层的Repository对象进行组件调用,只要保证你的IUnitwork上下文对象是唯一的就可以了。
二 为什么要出现IUnitOfWork接口
对于这个问题,一句话,就是为了减少与数据库通讯的次数,这一点在以后的课程中会着重讲解的,今天就不多说了!
祝各位晚安!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
2012-03-12 为什么要架构?当架构走火入魔时怎么办