zoukankan      html  css  js  c++  java
  • MVC5+EF6 简易版CMS(非接口) 第三章:数据存储和业务处理

    目录

    简易版CMS后台管理系统开发流程

    MVC5+EF6 简易版CMS(非接口) 第一章:新建项目

    MVC5+EF6 简易版CMS(非接口) 第二章:建数据模型

    MVC5+EF6 简易版CMS(非接口) 第三章:数据存储和业务处理

    MVC5+EF6 简易版CMS(非接口) 第四章:使用业务层方法,以及关联表解决方案

    先来了解下各项的引用关系

    FytCms.DALMSSQL=》Domain.Entity、EntityFramework

    BusinessLogic.Server=》FytCms.DALMSSQL

    FytCms.Web=》FytCms.Helper、Domain.Entity,BusinessLogic.Server,FytCms.Common

    ok 简单吧,哇咔咔

    1、在Core.Repository文件夹下,建FytCms.DALMSSQL类库

    这个类库主要的意思就是操作sql server的,当然你可以建FytCms.DALMySql类库,在类库增加方法

    主要使用EF操作数据

    /// <summary>
        /// 实现接口基类
        /// <remarks>创建:2015.05.04 FUYU
        /// </remarks>
        /// </summary>
        /// <typeparam name="T">类型</typeparam>
        public class BaseRepository<T> where T : class ,new()
        {
            /// <summary>
            /// 获得数据上下文
            /// </summary>
            protected FytSysDbContext FytContext = new FytSysDbContext();
    
    
            #region 1、添加
            /// <summary>
            /// 添加
            /// </summary>
            /// <param name="entity">数据实体</param>
            /// <param name="isSave">是否保存</param>
            /// <returns>添加后的数据实体</returns>
            public T Add(T entity, bool isSave = true)
            {
                FytContext.Set<T>().Add(entity);
                if (isSave) FytContext.SaveChanges();
                return entity;
            }
    
            /// <summary>
            /// 同时增加多条数据到一张表(事务处理)
            /// </summary>
            /// <param name="entitys"></param>
            /// <returns></returns>
            public bool AddEntity(List<T> entitys)
            {
                foreach (var entity in entitys)
                {
                    FytContext.Entry<T>(entity).State = System.Data.Entity.EntityState.Added;
                }
                return FytContext.SaveChanges() > 0;
            }
            #endregion
    
            #region 2、修改
            /// <summary>
            /// 更新
            /// </summary>
            /// <param name="entity">数据实体</param>
            /// <param name="isSave">是否保存</param>
            /// <returns>是否成功</returns>
            public bool Update(T entity, bool isSave = true)
            {
                FytContext.Set<T>().Attach(entity);
                FytContext.Entry<T>(entity).State = System.Data.Entity.EntityState.Modified;
                return !isSave || FytContext.SaveChanges() > 0;
            }
    
            /// <summary>
            /// 同时更新多条数据(事务处理)
            /// </summary>
            /// <param name="entitys">数据实体</param>
            /// <returns>是否成功</returns>
            public bool Update(List<T> entitys)
            {
                entitys.ForEach(entity =>
                {
                    FytContext.Set<T>().Attach(entity);
                    FytContext.Entry<T>(entity).State = System.Data.Entity.EntityState.Modified;//将所有属性标记为修改状态
                });
                return FytContext.SaveChanges() > 0;
            }
    
            /// <summary>
            /// 修改一条数据,会修改指定列的值
            /// </summary>
            /// <returns>是否成功</returns>
            public bool Update(T entity, params string[] proNames)
            {
                DbEntityEntry<T> dbee = FytContext.Entry<T>(entity);
                if (dbee.State == System.Data.Entity.EntityState.Detached)
                {
                    FytContext.Set<T>().Attach(entity);
                }
                dbee.State = System.Data.Entity.EntityState.Unchanged;//先将所有属性状态标记为未修改
                proNames.ToList().ForEach(c => dbee.Property(c).IsModified = true);//将要修改的属性状态标记为修改
                return FytContext.SaveChanges() > 0;
            }
            #endregion
    
            #region 3、删除
            /// <summary>
            /// 删除
            /// </summary>
            /// <param name="entity">数据实体</param>
            /// <param name="isSave">是否保存</param>
            /// <returns>是否成功</returns>
            public bool Delete(T entity, bool isSave = true)
            {
                FytContext.Set<T>().Attach(entity);
                FytContext.Entry<T>(entity).State = System.Data.Entity.EntityState.Deleted;
                return !isSave || FytContext.SaveChanges() > 0;
            }
    
            /// <summary>
            /// 根据条件删除
            /// </summary>
            /// <param name="delWhere">删除表达式</param>
            /// <param name="isSave">是否保存</param>
            /// <returns>是否成功</returns>
            public bool DeleteBy(Expression<Func<T, bool>> delWhere, bool isSave = true)
            {
                //3.1查询要删除的数据
                List<T> listDeleting = FytContext.Set<T>().Where(delWhere).ToList();
                //3.2将要删除的数据 用删除方法添加到 EF 容器中
                listDeleting.ForEach(u =>
                {
                    FytContext.Set<T>().Attach(u);//先附加到 EF容器
                    FytContext.Set<T>().Remove(u);//标识为 删除 状态
                });
                return !isSave || FytContext.SaveChanges() > 0;
            }
    
            /// <summary>
            /// 批量物理删除数据,也可以用作单个物理删除--此方法适用于id为int类型的表--性能会比先查询后删除快
            /// </summary>
            /// <param name="ids">ID集合1,2,3</param>
            /// <returns>是否成功</returns>
            public bool DeletePhysics(string ids)
            {
                var tableName = typeof(T).Name;//获取表名   
                var sql = string.Format("delete from {0} where id in({1})", tableName, ids);
                return FytContext.Database.ExecuteSqlCommand(sql) > 0;
            }
            #endregion
    
            #region 4、查询
            /// <summary>
            /// 是否存在
            /// </summary>
            /// <param name="anyLambda">查询表达式</param>
            /// <returns>布尔值</returns>
            public bool Exist(Expression<Func<T, bool>> anyLambda)
            {
                return FytContext.Set<T>().Any(anyLambda);
            }
    
            /// <summary>
            /// 查询记录数
            /// </summary>
            /// <param name="predicate">条件表达式</param>
            /// <returns>记录数</returns>
            public int Count(Expression<Func<T, bool>> predicate)
            {
                return FytContext.Set<T>().Count(predicate);
            }
    
            /// <summary>
            /// 查询数据根据ID主键(优先)
            /// </summary>
            /// <param name="id">主键</param>
            /// <returns>实体</returns>
            public T GetModel(int id)
            {
                return FytContext.Set<T>().Find(id);
            }
    
            /// <summary>
            /// 查询数据
            /// </summary>
            /// <param name="whereLambda">查询表达式</param>
            /// <returns>实体</returns>
            public T GetModel(Expression<Func<T, bool>> whereLambda)
            {
                var entity =FytContext.Set<T>().FirstOrDefault<T>(whereLambda);
                return entity;
            }
    
    
            /// <summary>
            /// 查找数据列表
            /// </summary>
            /// <typeparam name="TKey"></typeparam>
            /// <param name="whereLamdba">查询表达式</param>
            /// <param name="orderLambda">排序表达式</param>
            /// <param name="isAsc">是否升序</param>
            /// <returns></returns>
            public IQueryable<T> GetList<TKey>(Expression<Func<T, bool>> whereLamdba, Expression<Func<T, TKey>> orderLambda, bool isAsc)
            {
                return isAsc ? FytContext.Set<T>().Where(whereLamdba).OrderBy(orderLambda) :
                    FytContext.Set<T>().Where(whereLamdba).OrderByDescending(orderLambda);
            }
            #endregion
    
            #region 5、分页
    
            /// <summary>
            /// 查找分页数据列表
            /// </summary>
            /// <typeparam name="TKey">排序</typeparam>
            /// <param name="pageIndex">当前页</param>
            /// <param name="pageSize">每页记录数</param>
            /// <param name="rows">总行数</param>
            /// <param name="totalPage">分页总数</param>
            /// <param name="whereLambda">查询表达式</param>
            /// <param name="isAsc">是否升序</param>
            /// <param name="orderBy">排序表达式</param>
            /// <returns></returns>
            public IQueryable<T> GetPageList<TKey>(int pageIndex, int pageSize, out int rows, out int totalPage,
                Expression<Func<T, bool>> whereLambda, bool isAsc, Expression<Func<T, TKey>> orderBy)
            {
                var temp = FytContext.Set<T>().Where<T>(whereLambda);
                rows = temp.Count();
                totalPage = rows % pageSize == 0 ? rows / pageSize : rows / pageSize + 1;
                temp = isAsc ? temp.OrderBy<T, TKey>(orderBy) : temp.OrderByDescending<T, TKey>(orderBy);
                return  temp.Skip<T>(pageSize * (pageIndex - 1)).Take<T>(pageSize);
    
            }
            #endregion
        }

    数据操作做好,下一步就是业务调用数据操作,

    2、建立业务类

    在BusinessLogic.Server文件夹下增加BusinessLogic.Server类库,

    在该类库引用FytMsys.DALMSSQL

    新建类BaseServer   具体代码如下

    /// <summary>
        /// BLL层抽象类
        /// <remarks>创建:2015.05.04 FUYU
        /// </remarks>
        /// </summary>
        /// <typeparam name="T">类型</typeparam>
        public class BaseServer<T> where T : class,new()
        {
            /// <summary>
            /// 实例化数据层方法
            /// </summary>
            protected BaseRepository<T> Repository=new BaseRepository<T>();
    
            #region 1、添加
            /// <summary>
            /// 添加
            /// </summary>
            /// <param name="entity">数据实体</param>
            /// <param name="isSave">是否保存</param>
            /// <returns>添加后的数据实体</returns>
            public T Add(T entity, bool isSave = true)
            {
                return Repository.Add(entity,isSave);
            }
    
            /// <summary>
            /// 同时增加多条数据到一张表(事务处理)
            /// </summary>
            /// <param name="entitys"></param>
            /// <returns></returns>
            public bool AddEntity(List<T> entitys)
            {
                return Repository.AddEntity(entitys);
            }
            #endregion
    
            #region 2、修改
            /// <summary>
            /// 更新
            /// </summary>
            /// <param name="entity">数据实体</param>
            /// <param name="isSave">是否保存</param>
            /// <returns>是否成功</returns>
            public bool Update(T entity, bool isSave = true)
            {
                return Repository.Update(entity,isSave);
            }
    
            /// <summary>
            /// 同时更新多条数据(事务处理)
            /// </summary>
            /// <param name="entitys">数据实体</param>
            /// <returns>是否成功</returns>
            public bool Update(List<T> entitys)
            {
                return Repository.Update(entitys);
            }
    
            /// <summary>
            /// 修改一条数据,会修改指定列的值
            /// </summary>
            /// <returns>是否成功</returns>
            public bool Update(T entity, params string[] proNames)
            {
                return Repository.Update(entity,proNames);
            }
            #endregion
    
            #region 3、删除
            /// <summary>
            /// 删除
            /// </summary>
            /// <param name="entity">数据实体</param>
            /// <param name="isSave">是否保存</param>
            /// <returns>是否成功</returns>
            public bool Delete(T entity, bool isSave = true)
            {
                return Repository.Delete(entity,isSave);
            }
    
            /// <summary>
            /// 根据条件删除
            /// </summary>
            /// <param name="delWhere">删除表达式</param>
            /// <param name="isSave">是否保存</param>
            /// <returns>是否成功</returns>
            public bool DeleteBy(Expression<Func<T, bool>> delWhere, bool isSave = true)
            {
                return Repository.DeleteBy(delWhere,isSave);
            }
    
            /// <summary>
            /// 批量物理删除数据,也可以用作单个物理删除--此方法适用于id为int类型的表--性能会比先查询后删除快
            /// </summary>
            /// <param name="ids">ID集合1,2,3</param>
            /// <returns>是否成功</returns>
            public bool DeletePhysics(string ids)
            {
                return Repository.DeletePhysics(ids);
            }
            #endregion
    
            #region 4、查询
            /// <summary>
            /// 是否存在
            /// </summary>
            /// <param name="anyLambda">查询表达式</param>
            /// <returns>布尔值</returns>
            public bool Exist(Expression<Func<T, bool>> anyLambda)
            {
                return Repository.Exist(anyLambda);
            }
    
            /// <summary>
            /// 查询记录数
            /// </summary>
            /// <param name="predicate">条件表达式</param>
            /// <returns>记录数</returns>
            public int Count(Expression<Func<T, bool>> predicate)
            {
                return Repository.Count(predicate);
            }
    
            /// <summary>
            /// 查询数据根据ID主键(优先)
            /// </summary>
            /// <param name="id">主键</param>
            /// <returns>实体</returns>
            public T GetModel(int id)
            {
                return Repository.GetModel(id);
            }
    
            /// <summary>
            /// 查询数据
            /// </summary>
            /// <param name="whereLambda">查询表达式</param>
            /// <returns>实体</returns>
            public T GetModel(Expression<Func<T, bool>> whereLambda)
            {
                return Repository.GetModel(whereLambda);
            }
    
    
            /// <summary>
            /// 查找数据列表
            /// </summary>
            /// <typeparam name="TKey"></typeparam>
            /// <param name="whereLamdba">查询表达式</param>
            /// <param name="orderLambda">排序表达式</param>
            /// <param name="isAsc">是否升序</param>
            /// <returns></returns>
            public IQueryable<T> GetList<TKey>(Expression<Func<T, bool>> whereLamdba, Expression<Func<T, TKey>> orderLambda, bool isAsc)
            {
                return Repository.GetList(whereLamdba,orderLambda,isAsc);
            }
            #endregion
    
            #region 5、分页
    
            /// <summary>
            /// 查找分页数据列表
            /// </summary>
            /// <typeparam name="TKey">排序</typeparam>
            /// <param name="pageIndex">当前页</param>
            /// <param name="pageSize">每页记录数</param>
            /// <param name="rows">总行数</param>
            /// <param name="totalPage">分页总数</param>
            /// <param name="whereLambda">查询表达式</param>
            /// <param name="isAsc">是否升序</param>
            /// <param name="orderBy">排序表达式</param>
            /// <returns></returns>
            public IQueryable<T> GetPageList<TKey>(int pageIndex, int pageSize, out int rows, out int totalPage,
                Expression<Func<T, bool>> whereLambda, bool isAsc, Expression<Func<T, TKey>> orderBy)
            {
                return Repository.GetPageList(pageIndex,pageSize,out rows,out totalPage,whereLambda,isAsc,orderBy);
    
            }
            #endregion
    
        }

    可以在次扩展业务方法,也可以新建一个自定义类库引用BusinessLogic.Server  在自定义类库新建自定义类扩展方法

    要一步要做的就是WebUi层、

  • 相关阅读:
    virtual
    微软MBS intern笔试
    Ubuntu Linux Green hand
    Coding style
    abstract
    Jquery Ajax请求标准格式
    Hashtable的简单实用
    C#中GET和POST的简单区别
    WIN7 64位机与32位机有什么区别
    一个加密解密类
  • 原文地址:https://www.cnblogs.com/fuyu-blog/p/4481537.html
Copyright © 2011-2022 走看看