欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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 创建一个工厂类

ASP.Net MVC OA项目笔记<三>

 

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

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

ASP.Net MVC OA项目笔记<三>

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

ASP.Net MVC OA项目笔记<三>

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