在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
索引 【无私分享:从入门到精通ASP.NET MVC】从0开始,一起搭框架、做项目 目录索引简述 今天我们写一个基础数据的操作类,如果里面有大家不理解的地方,可采取两种方式,第一:提出来,第二:会用就行。这个类呢我一般不去修改它,因为基础操作类,大家也可以直接拷贝到自己的项目中。 项目准备 我们用的工具是:VS 2013 + SqlServer 2012 + IIS7.5 希望大家对ASP.NET MVC有一个初步的理解,理论性的东西我们不做过多解释,有些地方不理解也没关系,会用就行了,用的多了,用的久了,自然就理解了。 项目开始 一、创建接口 IRepository 我们在应用服务的Service类库下面新建一个接口 IRepository 右击Service类库→添加→新建项→接口 名称 IRepository
二、基础操作的接口方法 不了解接口的朋友需要注意下,接口是个规范,是不需要方法体的,说的通俗点,有了接口如果被继承肯定会有实现,这里你只需要写方法就行了,具体的方法是如何实现的我们不管,爱怎么实现怎么实现,我只是告诉你,你要是继承我这个接口,那么我这些方法你必须实现,而且要符合我规范。这就跟领导一条批示:你给我做个上传图片的方法,返回上传成功或失败。领导就是接口,你是实现类,你在这个领导下面干活,就相当于你继承了领导,那么你必须要完成这个图片上传方法并且返回上传结果,至于你是用网上的上传方法呀还是自己写个webservice啊还是用jquery插件啊随你,领导不关心你用什么,他只关心你按照他的要求去实现这个方法。这样不知道大家理解接口了不?
我们这个接口是公共基础数据操作类,所以要有数据模型啊,模型说白了就是类,因为是通用的,所以我们这里写 T 并且标识 T 是个 Class 我们的Service类库呢,如果按照三层架构来讲,应该是数据管理层,既然是数据管理层,那么我们就是操作数据模型的,我们添加Domain 数据模型的引用,并且我们可能用到一些公共的方法,所以我们也添加对Common公共帮助类库的引用
上面我们讲了,这是数据管理层,我们是要对数据进行操作的,公用类库呢,我们提供多种数据管理的方式,我们再添加两个库引用 EntityFramework和EntityFramework.SqlServer
我们先来声明几个数据对象操作
下面,我们写几个接口方法 主要有 单模型操作 多模型操作 存储过程操作 查询多条数据 分页查询 ADO.NET增删改查
有朋友看到这会骂街了,我擦,能不能直接贴代码,截图干嘛~~ 不要急,不要急,一定要有耐心~~ 我是先贴图,给大家有个大致的了解,代码肯定会贴出来的~~
单模型操作
1 #region 单模型操作 2 /// <summary> 3 /// 获取实体 4 /// </summary> 5 /// <param name="id">主键</param> 6 /// <returns>实体</returns> 7 T Get(Expression<Func<T, bool>> predicate); 8 /// <summary> 9 /// 插入实体 10 /// </summary> 11 /// <param name="entity">实体</param> 12 /// <returns>ID</returns> 13 bool Save(T entity); 14 15 /// <summary> 16 /// 修改实体 17 /// </summary> 18 /// <param name="entity">实体</param> 19 bool Update(T entity); 20 /// <summary> 21 /// 修改或保存实体 22 /// </summary> 23 /// <param name="entity">实体</param> 24 bool SaveOrUpdate(T entity, bool isEdit); 25 26 /// <summary> 27 /// 删除实体 28 /// </summary> 29 int Delete(Expression<Func<T, bool>> predicate = null); 30 31 /// <summary> 32 /// 执行SQL删除 33 /// </summary> 34 int DeleteBySql(string sql, params DbParameter[] para); 35 36 /// <summary> 37 /// 根据属性验证实体对象是否存在 38 /// </summary> 39 bool IsExist(Expression<Func<T, bool>> predicate); 40 41 /// <summary> 42 /// 根据SQL验证实体对象是否存在 43 /// </summary> 44 bool IsExist(string sql, params DbParameter[] para); 45 #endregion
多模型操作
1 #region 多模型操作 2 /// <summary> 3 /// 增加多模型数据,指定独立模型集合 4 /// </summary> 5 int SaveList<T1>(List<T1> t) where T1 : class; 6 /// <summary> 7 /// 增加多模型数据,与当前模型一致 8 /// </summary> 9 int SaveList(List<T> t); 10 /// <summary> 11 /// 更新多模型,指定独立模型集合 12 /// </summary> 13 int UpdateList<T1>(List<T1> t) where T1 : class; 14 /// <summary> 15 /// 更新多模型,与当前模型一致 16 /// </summary> 17 int UpdateList(List<T> t); 18 /// <summary> 19 /// 批量删除数据,当前模型 20 /// </summary> 21 int DeleteList(List<T> t); 22 /// <summary> 23 /// 批量删除数据,独立模型 24 /// </summary> 25 int DeleteList<T1>(List<T1> t) where T1 : class; 26 #endregion
存储过程操作
1 #region 存储过程操作 2 /// <summary> 3 /// 执行增删改存储过程 4 /// </summary> 5 object ExecuteProc(string procname, params DbParameter[] parameter); 6 /// <summary> 7 /// 执行查询的存储过程 8 /// </summary> 9 object ExecuteQueryProc(string procname, params DbParameter[] parameter); 10 #endregion
查询多条数据
1 #region 查询多条数据 2 /// <summary> 3 /// 获取集合 IQueryable 4 /// </summary> 5 IQueryable<T> LoadAll(Expression<Func<T, bool>> predicate); 6 /// <summary> 7 /// 获取集合 IList 8 /// </summary> 9 List<T> LoadListAll(Expression<Func<T, bool>> predicate); 10 /// <summary> 11 /// 获取DbQuery的列表 12 /// </summary> 13 DbQuery<T> LoadQueryAll(Expression<Func<T, bool>> predicate); 14 /// <summary> 15 /// 获取IEnumerable列表 16 /// </summary> 17 IEnumerable<T> LoadEnumerableAll(string sql, params DbParameter[] para); 18 /// <summary> 19 /// 获取数据动态集合 20 /// </summary> 21 System.Collections.IEnumerable LoadEnumerable(string sql, params DbParameter[] para); 22 /// <summary> 23 /// 采用SQL进行数据的查询,并转换 24 /// </summary> 25 List<T> SelectBySql(string sql, params DbParameter[] para); 26 List<T1> SelectBySql<T1>(string sql, params DbParameter[] para); 27 /// <summary> 28 /// 可指定返回结果、排序、查询条件的通用查询方法,返回实体对象 29 /// </summary> 30 /// <typeparam name="TEntity">实体对象</typeparam> 31 /// <typeparam name="TOrderBy">排序字段类型</typeparam> 32 /// <typeparam name="TResult">数据结果,一般为object</typeparam> 33 /// <param name="where">过滤条件,需要用到类型转换的需要提前处理与数据表一致的</param> 34 /// <param name="orderby">排序字段</param> 35 /// <param name="selector">返回结果(必须是模型中存在的字段)</param> 36 /// <param name="IsAsc">排序方向,true为正序false为倒序</param> 37 /// <returns>实体集合</returns> 38 List<TResult> QueryEntity<TEntity, TOrderBy, TResult>(Expression<Func<TEntity, bool>> where, Expression<Func<TEntity, TOrderBy>> orderby, Expression<Func<TEntity, TResult>> selector, bool IsAsc) 39 where TEntity : class 40 where TResult : class; 41 /// <summary> 42 /// 可指定返回结果、排序、查询条件的通用查询方法,返回Object对象 43 /// </summary> 44 /// <typeparam name="TEntity">实体对象</typeparam> 45 /// <typeparam name="TOrderBy">排序字段类型</typeparam> 46 /// <param name="where">过滤条件,需要用到类型转换的需要提前处理与数据表一致的</param> 47 /// <param name="orderby">排序字段</param> 48 /// <param name="selector">返回结果(必须是模型中存在的字段)</param> 49 /// <param name="IsAsc">排序方向,true为正序false为倒序</param> 50 /// <returns>自定义实体集合</returns> 51 List<object> QueryObject<TEntity, TOrderBy>(Expression<Func<TEntity, bool>> where, Expression<Func<TEntity, TOrderBy>> orderby, Func<IQueryable<TEntity>, List<object>> selector, bool IsAsc) 52 where TEntity : class; 53 /// <summary> 54 /// 可指定返回结果、排序、查询条件的通用查询方法,返回动态类对象 55 /// </summary> 56 /// <typeparam name="TEntity">实体对象</typeparam> 57 /// <typeparam name="TOrderBy">排序字段类型</typeparam> 58 /// <param name="where">过滤条件,需要用到类型转换的需要提前处理与数据表一致的</param> 59 /// <param name="orderby">排序字段</param> 60 /// <param name="selector">返回结果(必须是模型中存在的字段)</param> 61 /// <param name="IsAsc">排序方向,true为正序false为倒序</param> 62 /// <returns>动态类对象</returns> 63 dynamic QueryDynamic<TEntity, TOrderBy>(Expression<Func<TEntity, bool>> where, Expression<Func<TEntity, TOrderBy>> orderby, Func<IQueryable<TEntity>, List<object>> selector, bool IsAsc) 64 where TEntity : class; 65 #endregion
分页查询
1 #region 分页查询 2 3 /// <summary> 4 /// 通过SQL分页 5 /// </summary> 6 /// <param name="sql"></param> 7 /// <param name="parameters"></param> 8 /// <param name="page"></param> 9 /// <returns></returns> 10 IList<T1> PageByListSql<T1>(string sql, IList<DbParameter> parameters, PageCollection page); 11 IList<T> PageByListSql(string sql, IList<DbParameter> parameters, PageCollection page); 12 /// <summary> 13 /// 通用EF分页,默认显示20条记录 14 /// </summary> 15 /// <typeparam name="TEntity">实体模型</typeparam> 16 /// <typeparam name="TOrderBy">排序类型</typeparam> 17 /// <param name="index">当前页</param> 18 /// <param name="pageSize">显示条数</param> 19 /// <param name="where">过滤条件</param> 20 /// <param name="orderby">排序字段</param> 21 /// <param name="selector">结果集合</param> 22 /// <param name="isAsc">排序方向true正序 false倒序</param> 23 /// <returns>自定义实体集合</returns> 24 PageInfo<object> Query<TEntity, TOrderBy> 25 (int index, int pageSize, 26 Expression<Func<TEntity, bool>> where, 27 Expression<Func<TEntity, TOrderBy>> orderby, 28 Func<IQueryable<TEntity>, List<object>> selector, 29 bool IsAsc) 30 where TEntity : class; 31 /// <summary> 32 /// 对IQueryable对象进行分页逻辑处理,过滤、查询项、排序对IQueryable操作 33 /// </summary> 34 /// <param name="t">Iqueryable</param> 35 /// <param name="index">当前页</param> 36 /// <param name="PageSize">每页显示多少条</param> 37 /// <returns>当前IQueryable to List的对象</returns> 38 Common.PageInfo<T> Query(IQueryable<T> query, int index, int PageSize); 39 /// <summary> 40 /// 普通SQL查询分页方法 41 /// </summary> 42 /// <param name="index">当前页</param> 43 /// <param name="pageSize">显示行数</param> 44 /// <param name="tableName">表名/视图</param> 45 /// <param name="field">获取项</param> 46 /// <param name="filter">过滤条件</param> 47 /// <param name="orderby">排序字段+排序方向</param> 48 /// <param name="group">分组字段</param> 49 /// <returns>结果集</returns> 50 Common.PageInfo Query(int index, int pageSize, string tableName, string field, string filter, string orderby, string group, params DbParameter[] para); 51 /// <summary> 52 /// 简单的Sql查询分页 53 /// </summary> 54 /// <param name="index"></param> 55 /// <param name="pageSize"></param> 56 /// <param name="sql"></param> 57 /// <returns></returns> 58 Common.PageInfo Query(int index, int pageSize, string sql, string orderby, params DbParameter[] para); 59 /// <summary> 60 /// 多表联合分页算法 61 /// </summary> 62 PageInfo Query(IQueryable query, int index, int pagesize); 63 #endregion
ADO.NET增删改查
1 #region ADO.NET增删改查方法 2 /// <summary> 3 /// 执行增删改方法,含事务处理 4 /// </summary> 5 object ExecuteSqlCommand(string sql, params DbParameter[] para); 6 /// <summary> 7 /// 执行多条SQL,增删改方法,含事务处理 8 /// </summary> 9 object ExecuteSqlCommand(Dictionary<string, object> sqllist); 10 /// <summary> 11 /// 执行查询方法,返回动态类,接收使用var,遍历时使用dynamic类型 12 /// </summary> 13 object ExecuteSqlQuery(string sql, params DbParameter[] para); 14 #endregion
我们引用的类库和解决方案
1 using Common; 2 using System; 3 using System.Collections.Generic; 4 using System.Data.Common; 5 using System.Linq; 6 using System.Text; 7 using System.Data.Entity.Infrastructure; 8 using System.Data.Entity; 9 using System.Linq.Expressions;
这里是完整的IRepository.cs
1 using Common; 2 using System; 3 using System.Collections.Generic; 4 using System.Data.Common; 5 using System.Linq; 6 using System.Text; 7 using System.Data.Entity.Infrastructure; 8 using System.Data.Entity; 9 using System.Linq.Expressions; 10 11 namespace Service 12 { 13 /// <summary> 14 /// 所有的数据操作基类接口 15 /// add yuangang by 2016-05-09 16 /// </summary> 17 public interface IRepository<T> where T:class 18 { 19 #region 数据对象操作 20 /// <summary> 21 /// 数据上下文 22 /// </summary> 23 DbContext Context { get; } 24 /// <summary> 25 /// 数据上下文 26 /// </summary> 27 Domain.MyConfig Config { get; } 28 /// <summary> 29 /// 数据模型操作 30 /// </summary> 31 DbSet<T> dbSet { get; } 32 /// <summary> 33 /// EF事务 34 /// </summary> 35 DbContextTransaction Transaction { get; set; } 36 全部评论
专题导读
上一篇:FCKEditor在Asp.net环境下的配置安装发布时间:2022-07-10下一篇:asp.net mvc源码分析-ActionResult篇 ViewResult发布时间:2022-07-10热门推荐
热门话题
阅读排行榜
|
请发表评论