1.1.1 业务层和数据层之间加一个数据会话层,封装所有数据操作类实例的创建(工厂类)

工厂类是负责对象的创建

作用:将BLL和DAL解耦了,提供一个数据访问的统一访问点

数据会话层DBSession

业务层BLL通过数据会话层DBSession调用数据操作类的实例

1.1.2 CZBK.ItcastOA.DALFactory添加一个类 DBSession

并引用Model,IDAL,DAL

1.1.3 创建一个工厂类

1.1.4 一个业务可能涉及到对多张表的操作,这时候我希望只连一次数据库完成对多张表的操作,写一个保存的方法

先创建一个EF上下文操作类

1.1.5 要操作数据库连接对象,就必须引入EF,同之前一样,通过创建一个实体数据模型来引入EF

1.1.6 DBSession 提供一个工厂解耦,并提供一个保存的方法

 /// <summary>/// 1.数据会话层:就是一个工厂类,负责完成所有数据操作类实例的创建,然后业务层通过数据会话层来获取要操作数据类的实例,/// 所以数据会话层将业务层和数据层解耦。/// 2.在数据会话层中提供一个方法:完成所有数据的保存。/// </summary>public class DBSession{OAEntities Db = new OAEntities();private IUserInfoDal _UserInfoDal;public IUserInfoDal UserInfoDal{get{if(_UserInfoDal==null){_UserInfoDal=new UserInfoDal();}return _UserInfoDal;}set{_UserInfoDal = value;}}/// <summary>/// 一个业务中经常涉及到对多张表的操作,我们希望连接一次数据库,完成对这张表数据的操作,提高性能        /// 工作单元模式/// </summary>/// <returns></returns>public bool SaveChanges(){return Db.SaveChanges() > 0;}}

1.2.1 数据层DAL的BaseDal中,SaveChanges就不要了,都注释掉

在数据层中进行操作都只是在EF打上相应的标记,执行SaveChages时才进行数据库保存,不注释的话没调一次方法就得连一次数据库

工作单元模式:连一次数据库,把多条数据一次性保存回数据库

  public class BaseDal<T> where T : class, new(){OAEntities Db = new OAEntities();/// <summary>/// 新增/// </summary>/// <param name="entity"></param>/// <returns></returns>public T AddEntity(T entity){Db.Set<T>().Add(entity);//DbSet<T>//Db.SaveChanges();return entity;}/// <summary>/// 删除/// </summary>/// <param name="entity"></param>/// <returns></returns>public bool DeleteEntity(T entity){//追加到ef上,打上删除标记,再保存Db.Entry<T>(entity).State = System.Data.Entity.EntityState.Deleted;//return Db.SaveChanges() > 0;return true;}/// <summary>/// 更新/// </summary>/// <param name="entity"></param>/// <returns></returns>public bool EditEntity(T entity){//追加到ef上,打上编辑标记,再保存Db.Entry<T>(entity).State = System.Data.Entity.EntityState.Modified;//return Db.SaveChanges() > 0;return true;}/// <summary>/// 查询过滤/// </summary>/// <param name="whereLambda"></param>/// <returns></returns>public IQueryable<T> LoadEntities(Expression<Func<T, bool>> whereLambda){return Db.Set<T>().Where(whereLambda);}/// <summary>/// 分页/// </summary>/// <typeparam name="s"></typeparam>/// <param name="pageIndex">页码</param>/// <param name="pageSize">每页数量</param>/// <param name="totalCount">总数</param>/// <param name="whereLambda">过滤条件</param>/// <param name="orderbyLambda">排序条件</param>/// <param name="isAsc"></param>/// <returns></returns>public IQueryable<T> PageLoadEntities<s>(int pageIndex, int pageSize, out int totalCount, Expression<Func<T, bool>> whereLambda, Expression<Func<T, s>> orderbyLambda, bool isAsc){var temp = Db.Set<T>().Where(whereLambda);totalCount = temp.Count();if (isAsc)//正序
            {//列:pageIndex=3,pageSize=15//正序排列后,跳过第3页前的数据(前2页*15),剩下的只读取15条temp = temp.OrderBy<T, s>(orderbyLambda).Skip<T>((pageIndex - 1) * pageSize).Take<T>(pageSize);}else//倒序
            {temp = temp.OrderByDescending<T, s>(orderbyLambda).Skip<T>((pageIndex - 1) * pageSize).Take<T>(pageSize);}return temp;}}

转载于:https://www.cnblogs.com/VSMinos/p/9758382.html

ASP.Net MVC OA项目笔记三相关推荐

  1. 图文详解远程部署ASP.NET MVC 5项目

    图文详解远程部署ASP.NET MVC 5项目 原文:图文详解远程部署ASP.NET MVC 5项目 话外篇: 由于感觉自己的机器比较慢,配置不好,所以最近想把之前的项目部署到实验室的服务器上,但是由 ...

  2. ASP.NET MVC 2 学习笔记二: 表单的灵活提交

    ASP.NET MVC 2 学习笔记二:  表单的灵活提交 前面说到有做到公司内部的一个请假系统,用的是ASP.NET MVC 2+Entity Framework.虽然EF(Entity Frame ...

  3. 使用Visual Studio 2015 开发ASP.NET MVC 5 项目部署到Mono/Jexus

    最新的Mono 4.4已经支持运行asp.net mvc5项目,有的同学听了这句话就兴高采烈的拿起Visual Studio 2015创建了一个mvc 5的项目,然后部署到Mono上,浏览下发现一堆错 ...

  4. angular2+typescript在asp.net MVC Web项目上的实现

    网上现在还没有关于angular2+typescript在asp.net mvc web项目上的实现的系统介绍,这里我也只是探索到了一个简单的方式,还有很多问题没能解决.但是能有个好的开头也值得记录一 ...

  5. Asp.net MVC 示例项目Suteki.Shop分析之---结束篇

    到今天,这个系列的文章就要先告一段落了.其中我用了10篇文章也没有穷尽该项目的设计思想,只能从中捡了一些我感兴趣的东西进行了分析和说明,正所谓兴趣是最大的动力.当然限于本人水平有限,难免有一些认识上的 ...

  6. 利用Powershell自动部署asp.net mvc网站项目 (一)

    这一篇中我们会写一些关于自动化部署的代码.我们会使用 Powershell 书写这类代码. 你将发现这篇文章中涉及的东西非常具体,有的要求甚至相当苛刻且可能不具有通用性.这是因为部署从来都是跟环境打交 ...

  7. ASP.NET MVC案例教程(基于ASP.NET MVC beta)——第三篇

    摘要       本文对ASP.NET MVC的全局运行机理进行一个简要的介绍,以使得朋友们更好的理解后续文章. 前言       在上一篇文章中,我们实现了第一个ASP.NET MVC页面.对于没有 ...

  8. ASP.NET MVC 个人学习笔记之 Controller传值

    2019独角兽企业重金招聘Python工程师标准>>> //ControllerViewBag.Message = "Modify this template to jum ...

  9. ASP.NET MVC经典项目ProDinner项目解析(3)

    三.Data层解析 这一层主要是和数据库相关联的, 所以这一层直接关系到应用程序的健壮性.最近在各个渠道都在提大数据这个概念,大数据高并发,尤其是facebook倡导的基于java应用的Hadoop框 ...

最新文章

  1. 【Java学习笔记之十】Java中循环语句foreach使用总结及foreach写法失效的问题
  2. MySQL基础篇:数据操作语言DML
  3. SAP MM初阶之事务代码MIGO界面批次拆分最多输入15行?
  4. JQuery-Table斑马线
  5. .Net WinForm 启用XP效果的问题
  6. 无主之地kill ajax,阿克斯顿 - 无主之地中文维基 - 灰机wiki
  7. 非线性方程求根算法的C++实现
  8. 量化投资与信用风险机器学习建模
  9. 地图标注不完整图片_“地图帝”不规范使用图件之Anton Balazh作品介绍
  10. html计算100以内偶数和,学习脚本1:计算100以内奇数和和偶数和 (笔记)
  11. 信息系统监理学习笔记(2)
  12. PHP+ffmpeg音频格式转化踩坑实录
  13. dumprep 0 -u 到底是什么东西?
  14. 眼部卸妆液行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  15. 铁甲雄兵哪个服务器人最多,超级玩家第三期——铁甲雄兵全区最高等级玩家
  16. 【虹科讲座预告】企业如何防止基于USB的数据外泄
  17. Python 二分法求多项式单根
  18. Android EditText接收扫码枪输入,有时缺位,有时出现两次回车
  19. MongoDB学习笔记(三)
  20. 记可视化项目代码设计的心路历程以及理解

热门文章

  1. 线性表--链栈(十一)
  2. 大江大河2弹幕数据之词云分析、情感极性分析、主题分析、共现网络分析
  3. swift基础day6---类型转换、嵌套类型
  4. 错误代码:0x800704cf 不能访问网络位置(win7 访问不了局域网电脑)
  5. Ming-Hsuan Yang: Publications
  6. 电脑花屏是怎么回事(使用过程中出现花屏,该如何处理?)
  7. O365批量重置用户密码
  8. 使用Tomcat10.0.10搭建一个文件下载服务器
  9. illustrator插件--常用功能开发--画刀版2--js脚本开发--AI插件
  10. 开放系统理论(1)的起源和目标