当前位置: 移动技术网 > IT编程>开发语言>.net > ASP.Net MVC OA项目笔记<三>

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

2018年10月12日  | 移动技术网IT编程  | 我要评论

张兰平,中国的军车,珍爱网骗子

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

 

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网