目录

简易版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() > ;
}
#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() > ;
} /// <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() > ;
} /// <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() > ;
}
#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() > ;
} /// <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() > ;
} /// <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) > ;
}
#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 == ? rows / pageSize : rows / pageSize + ;
temp = isAsc ? temp.OrderBy<T, TKey>(orderBy) : temp.OrderByDescending<T, TKey>(orderBy);
return temp.Skip<T>(pageSize * (pageIndex - )).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层、

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

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

    目录 简易版CMS后台管理系统开发流程 MVC5+EF6 简易版CMS(非接口) 第一章:新建项目 MVC5+EF6 简易版CMS(非接口) 第二章:建数据模型 MVC5+EF6 简易版CMS(非接口 ...

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

    目录 简易版CMS后台管理系统开发流程 MVC5+EF6 简易版CMS(非接口) 第一章:新建项目 MVC5+EF6 简易版CMS(非接口) 第二章:建数据模型 MVC5+EF6 简易版CMS(非接口 ...

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

    目录 简易版CMS后台管理系统开发流程 MVC5+EF6 简易版CMS(非接口) 第一章:新建项目 MVC5+EF6 简易版CMS(非接口) 第二章:建数据模型 MVC5+EF6 简易版CMS(非接口 ...

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

    目录 简易版CMS后台管理系统开发流程 MVC5+EF6 简易版CMS(非接口) 第一章:新建项目 MVC5+EF6 简易版CMS(非接口) 第二章:建数据模型 MVC5+EF6 简易版CMS(非接口 ...

  5. Android学习之路——简易版微信为例(三)

    最近好久没有更新博文,一则是因为公司最近比较忙,另外自己在Android学习过程和简易版微信的开发过程中碰到了一些绊脚石,所以最近一直在学习充电中.下面来列举一下自己所走过的弯路: (1)本来打算前端 ...

  6. 计算机图形学 opengl版本 第三版------胡事民 第三章更多的绘图工具

    opengl  计算机图形学 第三版   第二部分   第三章更多的绘图工具 3.1   概述 第2章中  我们绘图使用的是屏幕窗口的基础坐标系    以像素为单位 屏幕坐标从左下角x从0延伸到scr ...

  7. 从零开始,搭建博客系统MVC5+EF6搭建框架(2),测试添加数据、集成Autofac依赖注入

    一.测试仓储层.业务层是否能实现对数据库表的操作 1.创建IsysUserInfoRepository接口来继承IBaseRepository父接口 namespace Wchl.WMBlog.IRe ...

  8. ASP.NET MVC5 网站开发实践(一) - 框架(续) 模型、数据存储、业务逻辑

    上次搭建好了项目框架,但还是觉得不太对劲,后来才想起来没有对开发目标进行定位,这个小demo虽然不用做需求分析,但是要实现什么效果还得明确.后来想了一下就做个最简单的网站,目标定为小公司进行展示用的网 ...

  9. Blazor client-side + webapi (.net core 3.1) 添加jwt验证流程(非host)第三章 客户端存储及验证

    准备工作: 安装Nuget包:Blazored.LocalStorge. 这是一个client-side 浏览器存储库,找了非常久. 官方文档中也有一款Microsoft.AspNetCore.Pro ...

随机推荐

  1. [solr] - SolrJ增删查

    使用SolrJ进行对Solr的增.删.查功能. 参考引用: http://wiki.apache.org/solr/Solrj Eclipse中新建一个项目:TestSolr 其中SorlJ的Lib包 ...

  2. Angular(1)

    1.设计原则 1.YAGNI  不要把未来需求引入当前工程   2.KISS  keep it simple and stupid  语义化标记 合理注释 符合规定的命名 3.DRY(don't re ...

  3. JVM参数(二)参数分类和即时(JIT)编译器诊断

    在这个系列的第二部分,我来介绍一下HotSpot JVM提供的不同类别的参数.我同样会讨论一些关于JIT编译器诊断的有趣参数. JVM 参数分类 HotSpot JVM 提供了三类参数.第一类包括了标 ...

  4. linux 安装软件程序

    1.用aptitude管理软件包 查看已安装的/未安装的等软件包 无法通过aptitude看到一个细节是所有跟某个特定软件包关联的所有文件的列表.利用dpkg命令能看到这个列表. dpkg -L pa ...

  5. “请运行Chkdsk工具”怎么解决

    今天重新系统,想从移动硬盘中拷贝数据,但是老是提示:“请运行Chkdsk工具” 于是在百度搜索一下,有人提供的解决方案很不错,在些引用一下,以备忘! 电脑上经常遇到这样的提示“某某某文件已损坏且无法读 ...

  6. Mono addin 学习笔记 3

    典型的基于Mono addin插件框架的应用程序有以下一个部分组成: 1. 主应用程序:提供了一系列的扩展点(Extension Point)供其他应用进行扩展: 2. 扩展插件: 其部署结构图如下为 ...

  7. Could not load file using Ranorex runtime : General Questions

    如果你将编译好的bin文件夹复制到另一个未安装Ranorex程序的电脑上运行遇到如下错误信息 Could not load file or assembly 'Ranorex.Core, Versio ...

  8. EXT学习之——Ext下拉框绑定无效的问题

    1.保证store定义是否在combobox前面 2.有没写  .load 3.有没赋值  xxstore:xxstore 具体看详细步骤 http://www.cnblogs.com/wdw3121 ...

  9. eclipse安装JAVA反编译插件

    前言:在实际的开发中几乎都会使用到一些框架来辅助项目的开发工作,对于一些框架的代码我们总怀有一些好奇之心,想一探究竟,有源码当然更好了,对于有些JAR包中的代码我们就需要利用反编译工具来看一下了,下面 ...

  10. [转载]: delphi中XLSReadWrite控件的使用(1)---简介

    XLSReadWrite控件简介: 一个你需要的,能在Delphi和.NET下访问Excel文件的完美解决方案. 一个经典的读写Excel的控件,对于使用Excel 开发很有帮助 官方网站: http ...