zoukankan      html  css  js  c++  java
  • ASP.Net MVC OA项目笔记<三>

    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;
            }
        }
  • 相关阅读:
    NopCommerce仓储模型解析
    NopCommerce事件发布订阅机制详解
    Mongodb学习笔记
    ES安装和运行
    Redis缓存使用方法
    Solr环境搭建
    Redis--redis集群环境搭建
    Redis--环境搭建
    Spring-----AOP深度理解
    Shell脚本编写2------有关变量
  • 原文地址:https://www.cnblogs.com/VSMinos/p/9758382.html
Copyright © 2011-2022 走看看