ASP.Net MVC OA項目筆記<二>


1.1.0 創建數據層

1.1.1 CZBK.ItcastOA.IDAL 引用 CZBK.ItcastOA.Model

1.2.1 給IDAL添加一個接口IUserInfoDal

         里面寫增刪改查分頁的接口方法

 public interface IUserInfoDal
    {
        //
        IQueryable<UserInfo> LoadEntities(System.Linq.Expressions.Expression<Func<UserInfo,bool>> whereLambda);
        //分頁
        //<s>方法的泛型,調這個方法時,傳遞這個類型
        IQueryable<UserInfo> PageLoadEntities<s>(int pageIndex, int pageSize, out int totalCount, System.Linq.Expressions.Expression<Func<UserInfo,bool>>whereLambda, System.Linq.Expressions.Expression<Func<UserInfo, s>>orderbyLambda, bool isAsc);
        //
        UserInfo AddEntity(UserInfo entity);
        //
        bool EditEntity(UserInfo entity);
        //
        bool DeleteEntity(UserInfo entity);

    }

 

1.3.1 給IDAL添加一個接口IBaseDal,並把IUserInfoDal的代碼剪切過去,UserInfo替換成T

 public interface IBaseDal<T>where T:class,new()
    {
        //
        IQueryable<T> LoadEntities(System.Linq.Expressions.Expression<Func<T, bool>> whereLambda);
        //分頁
        //<s>方法的泛型,調這個方法時,傳遞這個類型
        IQueryable<T> PageLoadEntities<s>(int pageIndex, int pageSize, out int totalCount, System.Linq.Expressions.Expression<Func<T, bool>> whereLambda, System.Linq.Expressions.Expression<Func<T, s>> orderbyLambda, bool isAsc);
        //
        T AddEntity(T entity);
        //
        bool EditEntity(T entity);
        //
        bool DeleteEntity(T entity);
    }

1.4.1 讓IUserInfoDal接口繼承IBaseDal,IUserInfoDal接口中只定義它特有的方法

 public interface IUserInfoDal:IBaseDal<UserInfo>
    { 
        //定義自己特有的方法
    }

2.1.1 CZBK.ItcastOA.DAL引用 IDAL和Model,添加一個類UserInfoDal

2.2.1 UserInfoDal繼承並實現IUserInfoDal

2.3.1 先拿到操作數據的類 OAEntities

2.3.2 創建一個數據操作對象 Db,但是Db.UserInfo.點不出來

         因為DAL沒有引入MVC

  

2.4.1 用新建空的實體模型的方法引入EF

 2.4.2 引入了下面這幾個文件,可以刪除掉生成的Model1.cs,這時候可以使用Db了

 

2.5.1 UserInfoDal實現增刪改查分頁的方法

 public class UserInfoDal : IUserInfoDal
    {
        OAEntities Db = new OAEntities();

        /// <summary>
        /// 新增
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public UserInfo AddEntity(UserInfo entity)
        {
            Db.UserInfo.Add(entity);
            Db.SaveChanges();
            return entity;
        }

        /// <summary>
        /// 刪除
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public bool DeleteEntity(UserInfo entity)
        {
            //追加到ef上,打上刪除標記,再保存
            Db.Entry<UserInfo>(entity).State = System.Data.Entity.EntityState.Deleted;
            return Db.SaveChanges() > 0;
        }

        /// <summary>
        /// 更新
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public bool EditEntity(UserInfo entity)
        {
            //追加到ef上,打上編輯標記,再保存
            Db.Entry<UserInfo>(entity).State = System.Data.Entity.EntityState.Modified;
            return Db.SaveChanges() > 0;
        }

        /// <summary>
        /// 查詢過濾
        /// </summary>
        /// <param name="whereLambda"></param>
        /// <returns></returns>
        public IQueryable<UserInfo> LoadEntities(Expression<Func<UserInfo, bool>> whereLambda)
        {
            return Db.UserInfo.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<UserInfo> PageLoadEntities<s>(int pageIndex, int pageSize, out int totalCount, Expression<Func<UserInfo, bool>> whereLambda, Expression<Func<UserInfo, s>> orderbyLambda, bool isAsc)
        {
            var temp = Db.UserInfo.Where(whereLambda);
            totalCount = temp.Count();
            if(isAsc)//正序
            {
                //例:pageIndex=3,pageSize=15
                //正序排列后,跳過第3頁前的數據(前2頁*15),剩下的只讀取15條
                temp = temp.OrderBy<UserInfo, s>(orderbyLambda).Skip<UserInfo>((pageIndex - 1) * pageSize).Take<UserInfo>(pageSize);
            }
            else//倒序
            {
                temp = temp.OrderByDescending<UserInfo, s>(orderbyLambda).Skip<UserInfo>((pageIndex - 1) * pageSize).Take<UserInfo>(pageSize);
            }
            return temp;
        }
    }

2.6.1 每個頁面都要實現增刪改查分頁的方法,所以可以新建一個BaseDal,把它們剪切到這里來,把公用方法的具體實現封裝起來

         把UserInfo都替換成T

         Db.T.Add() 沒有這種寫法,改成Db.Set<T>().Add(),返回的就是DbSet<T>

         EF可以操作數據,就是因為這個DbSet<T>

2.6.2 BaseDal不需要繼承IBaseDal,因為它已經把IBaseDal里面的公用方法都實現了

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

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

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

2.7.1 UserInfoDal繼承 BaseDal的公用方法,還繼承了接口IUserInfoDal的自定義方法

 public class UserInfoDal : BaseDal<UserInfo>,IUserInfoDal
    {
       //繼承了公用方法,並且還繼承了自定義的方法
       //因為BaseDal已經實現了IBaseDal的公共方法,這里不需要再實現IUserInfo繼承的IBaseDal的公共方法
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM