博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
说说IUnitOfWork~DbContext对象的创建应该向BLL层公开
阅读量:5858 次
发布时间:2019-06-19

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

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

在EF中,数据上下文通常是DbContext或者ObjectContext,而在linq to sql中数据上下文则是DataContext,它们的作用是建立一个数据库映射对象ORM,以更加方便的操作数据库,而它们的创建工作,我在很长一段时间将它约束在DAL层,对BLL层不公开创建方法,但当我对.net了解更多之后,觉得将数据上下文的创建工作公开到BLL层是很有必要的,最起码在程序性能上及原子化操作上很有必要。

原来我们在BLL层调用一个添加操作时,需要在DAL层先去定义这个实现,即使这个实体只存在一个添加操作,你也要去实现一下,这无疑加大了代码量,像这样:

public class ProductRepository : TestBase
{ #region Constructors public ProductRepository() { } public ProductRepository(IUnitOfWork db) : base((TestDataContext)db) { } #endregion ///
/// 一个方法,也要建立这个repository,有点坏味道 /// ///
public override void Insert(Product entity) { base.Insert(entity); } }

而,如果我们将数据上下文创建的工作公开到BLL层,那结果就不一样了,再配合IUnitOfWork思想,实现在BLL层对DAL方法的整合,实现向数据库发送一次连接请求,这种感觉,酷D了,呵呵。

public abstract class BLLBase    {        protected IUnitOfWork IUnitOfWork { get; private set; }        public BLLBase()            : this(null)        {        }        public BLLBase(IUnitOfWork iUnitOfWork)        {            IUnitOfWork = iUnitOfWork;        }        protected ICompleteRepository
LoadRepository
() where T : class { return IUnitOfWork == null ? new TestBase
() : new TestBase
(IUnitOfWork); } }

对于BLL层的祖宗,呵呵,BLLBas,它将数据上下文的创建工作在架造方法中注入,然后传递给LoadRepository这generic method,在BLL层的业务类中可以

继承它并为数据上下文进行实例化,再使用LoadRepository直接对数据表进行CURD操作,一切就是这样简单,看代码:

#region BLLBase中直接调用公用方法            IUnitOfWork.IsNotSubmit = true;            new OrderRepository(IUnitOfWork).Insert(order);            if (product != null)                LoadRepository
().Insert(product); IUnitOfWork.SaveChanges(); #endregion

OK,UI层直接调用BLL层的具体业务方法即可,下面我们再来看一个我DAL层的类结构,有时,我越得类结构图比代码更能说明问题:

CURD操作规范:

DAL层Repository模式实现:

IUnitOfWork工作单元规范:

 

转载于:https://www.cnblogs.com/lori/archive/2013/03/19/2970203.html

你可能感兴趣的文章
使用html5做的环形进度条
查看>>
如何写一份更好的简历
查看>>
web端播放m3u8视频流注意事项
查看>>
http浅析
查看>>
算法基础-希尔排序
查看>>
面试官: css3动画了解吗? 我: .......
查看>>
使用ConcurrentHashMap一定线程安全?
查看>>
【Laravel-海贼王系列】第十七章,Laravel 那些骚操作
查看>>
长春净月初二化学作业辅导班效果如何/哪里的老师教学好?
查看>>
webpack基础配置
查看>>
php之正则表达式函数总结
查看>>
Web前端-Ajax基础技术(下)
查看>>
Java面试题-数据库篇十一
查看>>
支配vue框架初阶项目之博客网站-注册页面-单选按钮
查看>>
Java 发送qq邮件
查看>>
技术工坊|解密区块链DApp的代码逻辑,从请求到数据存储都要经历什么?(上海)...
查看>>
小tips-一种移动端模拟实现返回拦截的方案
查看>>
刨根问底区块链 —— 基础篇
查看>>
带css样式的console.log() ,进来了解一下
查看>>
云服务器具体如何操作
查看>>