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;
        }
    }

 

posted @ 2018-10-09 10:13  在下慕名而来  阅读(735)  评论(0编辑  收藏  举报