• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

【无私分享:从入门到精通ASP.NET MVC】从0开始,一起搭框架、做项目(3)公共基础数 ...

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

索引

【无私分享:从入门到精通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
View Code

 

 

多模型操作

 

 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
View Code

 

 

存储过程操作

 

 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
View Code

 

 

查询多条数据

 

 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
View Code

 

 

分页查询

 

 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
View Code

 

 

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
View Code

 

 

我们引用的类库和解决方案

 

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;
View Code

 

 

这里是完整的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          
                       
                    
                    

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
FCKEditor在Asp.net环境下的配置安装发布时间:2022-07-10
下一篇:
asp.net mvc源码分析-ActionResult篇 ViewResult发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap