这里有新鲜出炉的精品教程, 程序狗速度看过来!
ASP.NET
ASP.NET 是. NET FrameWork 的一部分, 是一项微软公司的技术, 是一种使嵌入网页中的脚本可由因特网服务器执行的服务器端脚本技术, 它可以在通过 HTTP 请求文档时再在 Web 服务器上动态创建它们 指 Active Server Pages(动态服务器页面) , 运行于 IIS(Internet Information Server 服务, 是 Windows 开发的 Web 服务器) 之中的程序
这篇文章主要为大家详细介绍了 ASP.NET MVC5 网站开发之实现数据存储层功能, 感兴趣的小伙伴们可以参考一下
数据存储层在项目 Ninesky.DataLibrary 中实现, 整个项目只有一个类 Repository
Repository 中实现增删改查询等方法供业务逻辑层调用, 主要功能如下图:
具体步骤
一添加实体框架的引用
1 打开解决方案, 选择项目 Ninesky.DataLibrary, 在引用上右键, 选择管理 NuGet 程序包
在 NuGet 包管理器中的浏览标签中点击 EntityFramework, 点击右侧栏的安装按钮
在搜索框输入 EntityFramework.zh-Hans, 安装假体中文资源包
二实现数据仓储类
打开解决方案, 选择项目 Ninesky.DataLibrary, 将 Class1.cs 重命名为 Repository.cs, 在文档头添加 using System.Data.Entity; 将类名重命名为 public class Repository 改为 public class Repository<T> where T :class
1DbContext 属性
在 Repository 类中添加如下代码 public DbContext DbContext { get; set; }
2 构造函数
为类中添加够高函数, 可以直接传递 DbContex
- public Repository()
- { }
- public Repository(DbContext dbContext)
- {
- DbContext = dbContext;
- }
3 查找实体方法 Find
Find 有一个重载两个方法分别可以根据 ID 和根据 lamdba 表达式查找实体
- /// <summary>
- /// 查找实体
- /// </summary>
- /// <param name="ID"> 实体主键值 </param>
- /// <returns></returns>
- public T Find(int ID)
- {
- return DbContext.Set<T>().Find(ID);
- }
- /// <summary>
- /// 查找实体
- /// </summary>
- /// <param name="where"> 查询 Lambda 表达式 </param>
- /// <returns></returns>
- public T Find(Expression<Func<T,bool>> where)
- {
- return DbContext.Set<T>().SingleOrDefault(where);
- }
4 查找实体列表方法 FindList
根据需要 FindList 进行多次重载
- /// <summary>
- /// 查找实体列表
- /// </summary>
- /// <returns></returns>
- public IQueryable<T> FindList()
- {
- return DbContext.Set<T>();
- }
- /// <summary>
- /// 查找实体列表
- /// </summary>
- /// <typeparam name="TKey"> 排序建类型 </typeparam>
- /// <param name="order"> 排序表达式 </param>
- /// <param name="asc"> 是否正序 </param>
- /// <returns></returns>
- public IQueryable<T> FindList<TKey>(Expression<Func<T, TKey>> order, bool asc)
- {
- return asc ? DbContext.Set<T>().OrderBy(order) : DbContext.Set<T>().OrderByDescending(order);
- }
- /// <summary>
- /// 查找实体列表
- /// </summary>
- /// <typeparam name="TKey"> 排序键类型 </typeparam>
- /// <param name="order"> 排序键 </param>
- /// <param name="asc"> 是否正序 </param>
- /// <param name="number"> 获取的记录数量 </param>
- /// <returns></returns>
- public IQueryable<T> FindList<TKey>(Expression<Func<T, TKey>> order, bool asc,int number)
- {
- return asc ? DbContext.Set<T>().OrderBy(order).Take(number) : DbContext.Set<T>().OrderByDescending(order).Take(number);
- }
- /// <summary>
- /// 查找实体列表
- /// </summary>
- /// <param name="where"> 查询 Lambda 表达式 </param>
- /// <returns></returns>
- public IQueryable<T> FindList(Expression<Func<T, bool>> where)
- {
- return DbContext.Set<T>().Where(where);
- }
- /// <summary>
- /// 查找实体列表
- /// </summary>
- /// <param name="where"> 查询 Lambda 表达式 </param>
- /// <param name="number"> 获取的记录数量 </param>
- /// <returns></returns>
- public IQueryable<T> FindList(Expression<Func<T, bool>> where, int number)
- {
- return DbContext.Set<T>().Where(where).Take(number);
- }
- /// <summary>
- /// 查找实体列表
- /// </summary>
- /// <typeparam name="TKey"> 排序键类型 </typeparam>
- /// <param name="where"> 查询 Lambda 表达式 </param>
- /// <param name="order"> 排序键 </param>
- /// <param name="asc"> 是否正序 </param>
- /// <returns></returns>
- public IQueryable<T> FindList<TKey>(Expression<Func<T, bool>> where, Expression<Func<T, TKey>> order, bool asc)
- {
- return asc ? DbContext.Set<T>().Where(where).OrderBy(order) : DbContext.Set<T>().Where(where).OrderByDescending(order);
- }
- /// <summary>
- /// 查找实体列表
- /// </summary>
- /// <typeparam name="TKey"> 排序键类型 </typeparam>
- /// <param name="where"> 查询 Lambda 表达式 </param>
- /// <param name="order"> 排序键 </param>
- /// <param name="asc"> 是否正序 </param>
- /// <param name="number"> 获取的记录数量 </param>
- /// <returns></returns>
- public IQueryable<T> FindList<TKey>(Expression<Func<T, bool>> where, Expression<Func<T, TKey>> order, bool asc, int number)
- {
- return asc ? DbContext.Set<T>().Where(where).OrderBy(order).Take(number) : DbContext.Set<T>().Where(where).OrderByDescending(order).Take(number);
- }
5 查找实体分页列表方法 FindPageList
根据需要 FindPageList 进行多次重载
- /// <summary>
- /// 查找分页列表
- /// </summary>
- /// <param name="pageSize"> 每页记录数必须大于 1</param>
- /// <param name="pageIndex"> 页码首页从 1 开始, 页码必须大于 1</param>
- /// <param name="totalNumber"> 总记录数 </param>
- /// <returns></returns>
- public IQueryable<T> FindPageList(int pageSize, int pageIndex, out int totalNumber)
- {
- if (pageIndex <1) pageIndex = 1;
- if (pageSize < 1) pageSize = 10;
- IQueryable<T> _list = DbContext.Set<T>();
- totalNumber = _list.Count();
- return _list.Skip((pageIndex - 1) * pageIndex).Take(pageSize);
- }
- /// <summary>
- /// 查找分页列表
- /// </summary>
- /// <param name="pageSize"> 每页记录数必须大于 1</param>
- /// <param name="pageIndex"> 页码首页从 1 开始, 页码必须大于 1</param>
- /// <param name="totalNumber"> 总记录数 </param>
- /// <param name="order"> 排序键 </param>
- /// <param name="asc"> 是否正序 </param>
- /// <returns></returns>
- public IQueryable<T> FindPageList<TKey>(int pageSize, int pageIndex, out int totalNumber, Expression<Func<T, TKey>> order, bool asc)
- {
- if (pageIndex <1) pageIndex = 1;
- if (pageSize < 1) pageSize = 10;
- IQueryable<T> _list = DbContext.Set<T>();
- _list = asc ? _list.OrderBy(order) : _list.OrderByDescending(order);
- totalNumber = _list.Count();
- return _list.Skip((pageIndex - 1) * pageIndex).Take(pageSize);
- }
- /// <summary>
- /// 查找分页列表
- /// </summary>
- /// <param name="pageSize"> 每页记录数必须大于 1</param>
- /// <param name="pageIndex"> 页码首页从 1 开始, 页码必须大于 1</param>
- /// <param name="totalNumber"> 总记录数 </param>
- /// <param name="where"> 查询表达式 </param>
- public IQueryable<T> FindPageList(int pageSize, int pageIndex, out int totalNumber, Expression<Func<T, bool>> where)
- {
- if (pageIndex <1) pageIndex = 1;
- if (pageSize < 1) pageSize = 10;
- IQueryable<T> _list = DbContext.Set<T>().Where(where);
- totalNumber = _list.Count();
- return _list.Skip((pageIndex - 1) * pageIndex).Take(pageSize);
- }
- /// <summary>
- /// 查找分页列表
- /// </summary>
- /// <param name="pageSize"> 每页记录数必须大于 1</param>
- /// <param name="pageIndex"> 页码首页从 1 开始, 页码必须大于 1</param>
- /// <param name="totalNumber"> 总记录数 </param>
- /// <param name="where"> 查询表达式 </param>
- /// <param name="order"> 排序键 </param>
- /// <param name="asc"> 是否正序 </param>
- public IQueryable<T> FindPageList<TKey>(int pageSize, int pageIndex, out int totalNumber, Expression<Func<T, bool>> where, Expression<Func<T, TKey>> order, bool asc)
- {
- if (pageIndex <1) pageIndex = 1;
- if (pageSize < 1) pageSize = 10;
- IQueryable<T> _list = DbContext.Set<T>().Where(where);
- _list = asc ? _list.OrderBy(order) : _list.OrderByDescending(order);
- totalNumber = _list.Count();
- return _list.Skip((pageIndex - 1) * pageIndex).Take(pageSize);
- }
6 添加实体方法 Add
Add 方法有一个重载, 重载方法可以选择是否立即保存
- /// <summary>
- /// 添加实体
- /// </summary>
- /// <param name="entity"> 实体 </param>
- /// <returns > 受影响的对象的数目 </returns>
- public int Add(T entity)
- {
- return Add(entity, true);
- }
- /// <summary>
- /// 添加实体
- /// </summary>
- /// <param name="entity"> 实体 </param>
- /// <param name="isSave"> 是否立即保存 </param>
- /// <returns > 在 isSave 为 True 时返回受影响的对象的数目, 为 False 时直接返回 0</returns>
- public int Add(T entity,bool isSave)
- {
- DbContext.Set<T>().Add(entity);
- return isSave ? DbContext.SaveChanges() : 0;
- }
7 更新实体方法 Update
Updae 方法有一个重载, 重载方法可以选择是否立即保存
- #region Update
- /// <summary>
- /// 更新实体立即保存
- /// </summary>
- /// <param name="entity"> 实体 </param>
- /// <returns > 在 isSave 为 True 时返回受影响的对象的数目, 为 False 时直接返回 0</returns>
- public int Update(T entity)
- {
- return Update(entity, true);
- }
- /// <summary>
- /// 更新实体
- /// </summary>
- /// <param name="entity"> 实体 </param>
- /// <param name="isSave"> 是否立即保存 </param>
- /// <returns > 在 isSave 为 True 时返回受影响的对象的数目, 为 False 时直接返回 0</returns>
- public int Update(T entity, bool isSave)
- {
- DbContext.Set<T>().Attach(entity);
- DbContext.Entry<T>(entity).State = EntityState.Modified;
- return isSave ? DbContext.SaveChanges() : 0;
- }
8 删除实体方法 Delete
Delete 方法有两个重载, 一个是可以选择否立即保存, 另一个是批量删除
- /// <summary>
- /// 删除实体立即保存
- /// </summary>
- /// <param name="entity"> 实体 </param>
- /// <returns > 受影响的对象的数目 </returns>
- public int Delete(T entity)
- {
- return Delete(entity, true);
- }
- /// <summary>
- /// 删除实体
- /// </summary>
- /// <param name="entity"> 实体 </param>
- /// <param name="isSave"> 是否立即保存 </param>
- /// <returns > 在 isSave 为 True 时返回受影响的对象的数目, 为 False 时直接返回 0</returns>
- public int Delete(T entity,bool isSave)
- {
- DbContext.Set<T>().Remove(entity);
- return isSave ? DbContext.SaveChanges() : 0;
- }
- /// <summary>
- /// 批量删除实体
- /// </summary>
- /// <param name="entities"> 实体集合 </param>
- /// <returns > 受影响的对象的数目 </returns>
- public int Delete(IEnumerable<T> entities)
- {
- DbContext.Set<T>().RemoveRange(entities);
- return DbContext.SaveChanges();
- }
9 统计记录数方法 Count
Count 方法有一个重载, 可以根据表达式进行统计
- /// <summary>
- /// 记录数
- /// </summary>
- /// <returns></returns>
- public int Count()
- {
- return DbContext.Set<T>().Count();
- }
- /// <summary>
- /// 记录数
- /// </summary>
- /// <param name="predicate"> 表达式 </param>
- /// <returns></returns>
- public int Count(Expression<Func<T, bool>> predicate)
- {
- return DbContext.Set<T>().Count(predicate);
- }
10 是否存在
- /// <summary>
- /// 记录是否存在
- /// </summary>
- /// <param name="predicate"> 表达式 </param>
- /// <returns></returns>
- public bool IsContains(Expression<Func<T, bool>> predicate)
- {
- return Count(predicate)> 0;
- }
11 保存到数据库
- /// <summary>
- /// 保存数据在 AddUpateDelete 未立即保存的情况下使用
- /// </summary>
- /// <returns > 受影响的记录数 </returns>
- public int Save()
- {
- return DbContext.SaveChanges();
- }
来源: http://www.phperz.com/article/18/0312/352549.html