IRepository.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Data.Common;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Data.Entity.Infrastructure;
  7. using System.Data.Entity;
  8. using System.Linq.Expressions;
  9. using Central.Control.Domain;
  10. using Ant.Service.Common;
  11. namespace MES.Production.Service
  12. {
  13. /// <summary>
  14. /// 所有的数据操作基类接口
  15. /// add 作者: 季健国 QQ:181589805 by 2016-05-10
  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. 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. /// <summary>
  37. /// 事务提交结果
  38. /// </summary>
  39. bool Committed { get; set; }
  40. /// <summary>
  41. /// 提交事务
  42. /// </summary>
  43. void Commit();
  44. /// <summary>
  45. /// 回滚事务
  46. /// </summary>
  47. void Rollback();
  48. #endregion
  49. #region 单模型操作
  50. /// <summary>
  51. /// 获取实体
  52. /// </summary>
  53. /// <param name="id">主键</param>
  54. /// <returns>实体</returns>
  55. T Get(Expression<Func<T, bool>> predicate);
  56. /// <summary>
  57. /// 插入实体
  58. /// </summary>
  59. /// <param name="entity">实体</param>
  60. /// <returns>ID</returns>
  61. bool Save(T entity);
  62. /// <summary>
  63. ///
  64. /// </summary>
  65. /// <param name="entity"></param>
  66. /// <returns></returns>
  67. T SaveReturn(T entity);
  68. /// <summary>
  69. /// 修改实体
  70. /// </summary>
  71. /// <param name="entity">实体</param>
  72. bool Update(T entity);
  73. /// <summary>
  74. /// 修改或保存实体
  75. /// </summary>
  76. /// <param name="entity">实体</param>
  77. bool SaveOrUpdate(T entity, bool isEdit);
  78. /// <summary>
  79. ///
  80. /// </summary>
  81. /// <param name="entity"></param>
  82. /// <param name="isEdit"></param>
  83. /// <returns></returns>
  84. T SaveOrUpdateReturn(T entity, bool isEdit);
  85. /// <summary>
  86. /// 删除实体
  87. /// </summary>
  88. int Delete(Expression<Func<T, bool>> predicate = null);
  89. /// <summary>
  90. /// 执行SQL删除
  91. /// </summary>
  92. int DeleteBySql(string sql, params DbParameter[] para);
  93. /// <summary>
  94. /// 根据属性验证实体对象是否存在
  95. /// </summary>
  96. bool IsExist(Expression<Func<T, bool>> predicate);
  97. /// <summary>
  98. /// 根据SQL验证实体对象是否存在
  99. /// </summary>
  100. bool IsExist(string sql, params DbParameter[] para);
  101. #endregion
  102. #region 多模型操作
  103. /// <summary>
  104. /// 增加多模型数据,指定独立模型集合
  105. /// </summary>
  106. int SaveList<T1>(List<T1> t) where T1 : class;
  107. /// <summary>
  108. /// 增加多模型数据,与当前模型一致
  109. /// </summary>
  110. int SaveList(List<T> t);
  111. /// <summary>
  112. /// 更新多模型,指定独立模型集合
  113. /// </summary>
  114. int UpdateList<T1>(List<T1> t) where T1 : class;
  115. /// <summary>
  116. /// 更新多模型,与当前模型一致
  117. /// </summary>
  118. int UpdateList(List<T> t);
  119. /// <summary>
  120. /// 批量删除数据,当前模型
  121. /// </summary>
  122. int DeleteList(List<T> t);
  123. /// <summary>
  124. /// 批量删除数据,独立模型
  125. /// </summary>
  126. int DeleteList<T1>(List<T1> t) where T1 : class;
  127. #endregion
  128. #region 存储过程操作
  129. /// <summary>
  130. /// 执行增删改存储过程
  131. /// </summary>
  132. object ExecuteProc(string procname, params DbParameter[] parameter);
  133. /// <summary>
  134. /// 执行查询的存储过程
  135. /// </summary>
  136. object ExecuteQueryProc(string procname, params DbParameter[] parameter);
  137. #endregion
  138. #region 查询多条数据
  139. /// <summary>
  140. /// 获取集合 IQueryable
  141. /// </summary>
  142. IQueryable<T> LoadAll(Expression<Func<T, bool>> predicate);
  143. /// <summary>
  144. /// 获取集合 IList
  145. /// </summary>
  146. List<T> LoadListAll(Expression<Func<T, bool>> predicate);
  147. /// <summary>
  148. /// 获取DbQuery的列表
  149. /// </summary>
  150. DbQuery<T> LoadQueryAll(Expression<Func<T, bool>> predicate);
  151. /// <summary>
  152. /// 获取IEnumerable列表
  153. /// </summary>
  154. IEnumerable<T> LoadEnumerableAll(string sql, params DbParameter[] para);
  155. /// <summary>
  156. /// 获取数据动态集合
  157. /// </summary>
  158. System.Collections.IEnumerable LoadEnumerable(string sql, params DbParameter[] para);
  159. /// <summary>
  160. /// 采用SQL进行数据的查询,并转换
  161. /// </summary>
  162. List<T> SelectBySql(string sql, params DbParameter[] para);
  163. List<T1> SelectBySql<T1>(string sql, params DbParameter[] para);
  164. /// <summary>
  165. /// 可指定返回结果、排序、查询条件的通用查询方法,返回实体对象
  166. /// </summary>
  167. /// <typeparam name="TEntity">实体对象</typeparam>
  168. /// <typeparam name="TOrderBy">排序字段类型</typeparam>
  169. /// <typeparam name="TResult">数据结果,一般为object</typeparam>
  170. /// <param name="where">过滤条件,需要用到类型转换的需要提前处理与数据表一致的</param>
  171. /// <param name="orderby">排序字段</param>
  172. /// <param name="selector">返回结果(必须是模型中存在的字段)</param>
  173. /// <param name="IsAsc">排序方向,true为正序false为倒序</param>
  174. /// <returns>实体集合</returns>
  175. List<TResult> QueryEntity<TEntity, TOrderBy, TResult>(Expression<Func<TEntity, bool>> where, Expression<Func<TEntity, TOrderBy>> orderby, Expression<Func<TEntity, TResult>> selector, bool IsAsc)
  176. where TEntity : class
  177. where TResult : class;
  178. /// <summary>
  179. /// 可指定返回结果、排序、查询条件的通用查询方法,返回Object对象
  180. /// </summary>
  181. /// <typeparam name="TEntity">实体对象</typeparam>
  182. /// <typeparam name="TOrderBy">排序字段类型</typeparam>
  183. /// <param name="where">过滤条件,需要用到类型转换的需要提前处理与数据表一致的</param>
  184. /// <param name="orderby">排序字段</param>
  185. /// <param name="selector">返回结果(必须是模型中存在的字段)</param>
  186. /// <param name="IsAsc">排序方向,true为正序false为倒序</param>
  187. /// <returns>自定义实体集合</returns>
  188. List<object> QueryObject<TEntity, TOrderBy>(Expression<Func<TEntity, bool>> where, Expression<Func<TEntity, TOrderBy>> orderby, Func<IQueryable<TEntity>, List<object>> selector, bool IsAsc)
  189. where TEntity : class;
  190. /// <summary>
  191. /// 可指定返回结果、排序、查询条件的通用查询方法,返回动态类对象
  192. /// </summary>
  193. /// <typeparam name="TEntity">实体对象</typeparam>
  194. /// <typeparam name="TOrderBy">排序字段类型</typeparam>
  195. /// <param name="where">过滤条件,需要用到类型转换的需要提前处理与数据表一致的</param>
  196. /// <param name="orderby">排序字段</param>
  197. /// <param name="selector">返回结果(必须是模型中存在的字段)</param>
  198. /// <param name="IsAsc">排序方向,true为正序false为倒序</param>
  199. /// <returns>动态类对象</returns>
  200. dynamic QueryDynamic<TEntity, TOrderBy>(Expression<Func<TEntity, bool>> where, Expression<Func<TEntity, TOrderBy>> orderby, Func<IQueryable<TEntity>, List<object>> selector, bool IsAsc)
  201. where TEntity : class;
  202. #endregion
  203. #region 分页查询
  204. /// <summary>
  205. /// 通过SQL分页
  206. /// </summary>
  207. /// <param name="sql"></param>
  208. /// <param name="parameters"></param>
  209. /// <param name="page"></param>
  210. /// <returns></returns>
  211. IList<T1> PageByListSql<T1>(string sql, IList<DbParameter> parameters, PageCollection page);
  212. IList<T> PageByListSql(string sql, IList<DbParameter> parameters, PageCollection page);
  213. /// <summary>
  214. /// 通用EF分页,默认显示20条记录
  215. /// </summary>
  216. /// <typeparam name="TEntity">实体模型</typeparam>
  217. /// <typeparam name="TOrderBy">排序类型</typeparam>
  218. /// <param name="index">当前页</param>
  219. /// <param name="pageSize">显示条数</param>
  220. /// <param name="where">过滤条件</param>
  221. /// <param name="orderby">排序字段</param>
  222. /// <param name="selector">结果集合</param>
  223. /// <param name="isAsc">排序方向true正序 false倒序</param>
  224. /// <returns>自定义实体集合</returns>
  225. PageInfo<object> Query<TEntity, TOrderBy>
  226. (int index, int pageSize,
  227. Expression<Func<TEntity, bool>> where,
  228. Expression<Func<TEntity, TOrderBy>> orderby,
  229. Func<IQueryable<TEntity>, List<object>> selector,
  230. bool IsAsc)
  231. where TEntity : class;
  232. /// <summary>
  233. /// 对IQueryable对象进行分页逻辑处理,过滤、查询项、排序对IQueryable操作
  234. /// </summary>
  235. /// <param name="t">Iqueryable</param>
  236. /// <param name="index">当前页</param>
  237. /// <param name="PageSize">每页显示多少条</param>
  238. /// <returns>当前IQueryable to List的对象</returns>
  239. PageInfo<T> Query(IQueryable<T> query, int index, int PageSize);
  240. /// <summary>
  241. /// 普通SQL查询分页方法
  242. /// </summary>
  243. /// <param name="index">当前页</param>
  244. /// <param name="pageSize">显示行数</param>
  245. /// <param name="tableName">表名/视图</param>
  246. /// <param name="field">获取项</param>
  247. /// <param name="filter">过滤条件</param>
  248. /// <param name="orderby">排序字段+排序方向</param>
  249. /// <param name="group">分组字段</param>
  250. /// <returns>结果集</returns>
  251. PageInfo Query(int index, int pageSize, string tableName, string field, string filter, string orderby, string group, params DbParameter[] para);
  252. /// <summary>
  253. /// 简单的Sql查询分页
  254. /// </summary>
  255. /// <param name="index"></param>
  256. /// <param name="pageSize"></param>
  257. /// <param name="sql"></param>
  258. /// <returns></returns>
  259. PageInfo Query(int index, int pageSize, string sql, string orderby, params DbParameter[] para);
  260. /// <summary>
  261. /// 多表联合分页算法
  262. /// </summary>
  263. PageInfo Query(IQueryable query, int index, int pagesize);
  264. #endregion
  265. #region ADO.NET增删改查方法
  266. /// <summary>
  267. /// 执行增删改方法,含事务处理
  268. /// </summary>
  269. object ExecuteSqlCommand(string sql, params DbParameter[] para);
  270. /// <summary>
  271. /// 执行多条SQL,增删改方法,含事务处理
  272. /// </summary>
  273. object ExecuteSqlCommand(Dictionary<string, object> sqllist);
  274. /// <summary>
  275. /// 执行查询方法,返回动态类,接收使用var,遍历时使用dynamic类型
  276. /// </summary>
  277. object ExecuteSqlQuery(string sql, params DbParameter[] para);
  278. #endregion
  279. }
  280. }