ASP.Net MVC OA项目笔记<三>
程序员文章站
2022-05-21 11:18:04
1.1.1 业务层和数据层之间加一个数据会话层,封装所有数据操作类实例的创建(工厂类) 工厂类是负责对象的创建 作用:将BLL和DAL解耦了,提供一个数据访问的统一访问点 数据会话层DBSession 业务层BLL通过数据会话层DBSession调用数据操作类的实例 1.1.2 CZBK.Itcas ......
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; } }
上一篇: artDialog基本使用
下一篇: maven添加阿里云镜像与常用配置
推荐阅读
-
创建基于ASP.NET core 3.1 的RazorPagesMovie项目(三)-已搭建基架的Razor页面解释和更新
-
asp.net core项目mvc权限控制:分配权限
-
ASP.NET MVC 主要的四种过滤器和三种具体实现类
-
MVC项目结构搭建及单个类的实现学习笔记1
-
ASP.NET MVC项目实现BasePage基类用作ASPX.CS网页继承
-
ASP.NET MVC项目中App_Code目录在程序应用
-
asp.net mvc项目使用spring.net发布到IIS后,在访问提示错误 Could not load type from string value 'DALMsSql.DBSessionFactory,DALMsSql'.
-
把ASP.NET MVC项目部署到本地IIS上的完整步骤
-
ASP.NET Core 2.0 : 三. 项目结构
-
ASP.Net MVC OA项目笔记<四>