博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
说说IUnitOfWork~认识IUnitOfWork,为什么要出现IUnitOfWork接口
阅读量:6824 次
发布时间:2019-06-26

本文共 1444 字,大约阅读时间需要 4 分钟。

第一讲 认识IUnitOfWork,为什么要出现IUnitOfWork接口 第二讲 Linq to Sql与EntityFrameworks中的SubmtChanges()发生了什么事 第三讲 方法完整性与统一提交不冲突 第四讲 DbContext对象的创建应该向BLL层公开 第五讲 我的IUnitOfWork+Repository架构

     今天愉点时间,说说IUnitOfWork,它事实上是NHibernate上的东西,这里只是借一下它的思想,把咱们的EF和LinqToSql也优化一下,呵呵!对于IUnitOfWork它的中文是操作单元的意思,顾名思义,就是将多个操作放在一个单元中,把操作原子化,概念上有点像事务,但事实上并不是,它主要是指对数据库通信来说,统一完成一次提交,这对于优化系统的性能是非常必要的,接下来,我会分5讲来说明一下IUnitOfWork。

一  认识IUnitOfWork

我们一般对IUnitOfWork接口会定义如下元素:

///     /// 工作单元    /// 提供一个保存方法,它可以对调用层公开,为了减少连库次数    ///     public interface IUnitWork    {        ///         /// 直接提交到数据库        ///         void Save();        ///         /// 是否不提交到数据库,默认值设为false,即提交到数据库        /// 它通常于数据上下文基类去实现        ///         /// 
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接口

对于这个问题,一句话,就是为了减少与数据库通讯的次数,这一点在以后的课程中会着重讲解的,今天就不多说了!

祝各位晚安!

本文转自博客园张占岭(仓储大叔)的博客,原文链接:,如需转载请自行联系原博主。

你可能感兴趣的文章
Win10 远程桌面 连上就断开
查看>>
C基础:scanf()及getchar()
查看>>
Preload与 Prefetch
查看>>
前端页面如何适应不同屏幕分辨率常用做法
查看>>
The Best Linux Distribution of them all
查看>>
spring security:IllegalArgumentException
查看>>
在springboot日志打印的过程中,大量打印JndiPropertySource信息
查看>>
Hadoop CDH4.5 HDFS集群部署
查看>>
linux su和sudo命令的区别
查看>>
ORACLE SEQUENCE用法
查看>>
Nginx伪静态配置和常用Rewrite伪静态法则
查看>>
解析nginx负载均衡
查看>>
python 发送邮件535, 'Error: authentication failed' 解决
查看>>
我的友情链接
查看>>
IPsec ×××的交互模式
查看>>
php-fpm配置多进程池运行
查看>>
软件工程-乱弹
查看>>
进程vs线程
查看>>
基础总结篇之三:Activity的task相关
查看>>
JavaScript的循环方式(1)
查看>>