BaseService.cs 39 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015
  1. using Masuit.LuceneEFCore.SearchEngine.Interfaces;
  2. using Masuit.MyBlogs.Core.Infrastructure.Repository.Interface;
  3. using Masuit.MyBlogs.Core.Infrastructure.Services.Interface;
  4. using Masuit.Tools.Models;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Linq;
  8. using System.Linq.Expressions;
  9. using System.Threading.Tasks;
  10. namespace Masuit.MyBlogs.Core.Infrastructure.Services
  11. {
  12. /// <summary>
  13. /// 业务层基类
  14. /// </summary>
  15. /// <typeparam name="T"></typeparam>
  16. public class BaseService<T> : IBaseService<T> where T : class, new()
  17. {
  18. public virtual IBaseRepository<T> BaseDal { get; set; }
  19. protected readonly ISearchEngine<DataContext> SearchEngine;
  20. protected readonly ILuceneIndexSearcher Searcher;
  21. public BaseService(IBaseRepository<T> repository, ISearchEngine<DataContext> searchEngine, ILuceneIndexSearcher searcher)
  22. {
  23. BaseDal = repository;
  24. SearchEngine = searchEngine;
  25. Searcher = searcher;
  26. }
  27. /// <summary>
  28. /// 获取所有实体
  29. /// </summary>
  30. /// <returns>还未执行的SQL语句</returns>
  31. public virtual IQueryable<T> GetAll()
  32. {
  33. return BaseDal.GetAll();
  34. }
  35. /// <summary>
  36. /// 获取所有实体(不跟踪)
  37. /// </summary>
  38. /// <returns>还未执行的SQL语句</returns>
  39. public virtual IQueryable<T> GetAllNoTracking()
  40. {
  41. return BaseDal.GetAllNoTracking();
  42. }
  43. /// <summary>
  44. /// 从二级缓存获取所有实体
  45. /// </summary>
  46. /// <returns>还未执行的SQL语句</returns>
  47. public virtual IEnumerable<T> GetAllFromCache()
  48. {
  49. return BaseDal.GetAllFromCache();
  50. }
  51. /// <summary>
  52. /// 从二级缓存获取所有实体
  53. /// </summary>
  54. /// <returns>还未执行的SQL语句</returns>
  55. public Task<IEnumerable<T>> GetAllFromCacheAsync()
  56. {
  57. return BaseDal.GetAllFromCacheAsync();
  58. }
  59. /// <summary>
  60. /// 获取所有实体
  61. /// </summary>
  62. /// <typeparam name="TDto">映射实体</typeparam>
  63. /// <returns>还未执行的SQL语句</returns>
  64. public virtual IQueryable<TDto> GetAll<TDto>() where TDto : class
  65. {
  66. return BaseDal.GetAll<TDto>();
  67. }
  68. /// <summary>
  69. /// 获取所有实体
  70. /// </summary>
  71. /// <typeparam name="TDto">映射实体</typeparam>
  72. /// <returns>还未执行的SQL语句</returns>
  73. public virtual IEnumerable<TDto> GetAllFromCache<TDto>() where TDto : class
  74. {
  75. return BaseDal.GetAllFromCache<TDto>();
  76. }
  77. /// <summary>
  78. /// 获取所有实体
  79. /// </summary>
  80. /// <typeparam name="TDto">映射实体</typeparam>
  81. /// <returns>还未执行的SQL语句</returns>
  82. public Task<IEnumerable<TDto>> GetAllFromCacheAsync<TDto>() where TDto : class
  83. {
  84. return BaseDal.GetAllFromCacheAsync<TDto>();
  85. }
  86. /// <summary>
  87. /// 获取所有实体
  88. /// </summary>
  89. /// <typeparam name="TS">排序</typeparam>
  90. /// <param name="orderby">排序字段</param>
  91. /// <param name="isAsc">是否升序</param>
  92. /// <returns>还未执行的SQL语句</returns>
  93. public virtual IOrderedQueryable<T> GetAll<TS>(Expression<Func<T, TS>> @orderby, bool isAsc = true)
  94. {
  95. return BaseDal.GetAll(orderby, isAsc);
  96. }
  97. /// <summary>
  98. /// 获取所有实体
  99. /// </summary>
  100. /// <typeparam name="TS">排序</typeparam>
  101. /// <param name="orderby">排序字段</param>
  102. /// <param name="isAsc">是否升序</param>
  103. /// <returns>还未执行的SQL语句</returns>
  104. public virtual IOrderedQueryable<T> GetAllNoTracking<TS>(Expression<Func<T, TS>> @orderby, bool isAsc = true)
  105. {
  106. return BaseDal.GetAllNoTracking(orderby, isAsc);
  107. }
  108. /// <summary>
  109. /// 获取所有实体
  110. /// </summary>
  111. /// <typeparam name="TS">排序</typeparam>
  112. /// <param name="orderby">排序字段</param>
  113. /// <param name="isAsc">是否升序</param>
  114. /// <returns>还未执行的SQL语句</returns>
  115. public virtual IEnumerable<T> GetAllFromCache<TS>(Expression<Func<T, TS>> @orderby, bool isAsc = true)
  116. {
  117. return BaseDal.GetAllFromCache(orderby, isAsc);
  118. }
  119. /// <summary>
  120. /// 获取所有实体
  121. /// </summary>
  122. /// <typeparam name="TS">排序</typeparam>
  123. /// <param name="orderby">排序字段</param>
  124. /// <param name="isAsc">是否升序</param>
  125. /// <returns>还未执行的SQL语句</returns>
  126. public Task<IEnumerable<T>> GetAllFromCacheAsync<TS>(Expression<Func<T, TS>> @orderby, bool isAsc = true)
  127. {
  128. return BaseDal.GetAllFromCacheAsync(orderby, isAsc);
  129. }
  130. /// <summary>
  131. /// 获取所有实体
  132. /// </summary>
  133. /// <typeparam name="TS">排序</typeparam>
  134. /// <typeparam name="TDto">映射实体</typeparam>
  135. /// <param name="orderby">排序字段</param>
  136. /// <param name="isAsc">是否升序</param>
  137. /// <returns>还未执行的SQL语句</returns>
  138. public virtual IQueryable<TDto> GetAll<TS, TDto>(Expression<Func<T, TS>> @orderby, bool isAsc = true) where TDto : class
  139. {
  140. return BaseDal.GetAll<TS, TDto>(orderby, isAsc);
  141. }
  142. /// <summary>
  143. /// 获取所有实体
  144. /// </summary>
  145. /// <typeparam name="TS">排序</typeparam>
  146. /// <typeparam name="TDto">映射实体</typeparam>
  147. /// <param name="orderby">排序字段</param>
  148. /// <param name="isAsc">是否升序</param>
  149. /// <returns>还未执行的SQL语句</returns>
  150. public virtual IEnumerable<TDto> GetAllFromCache<TS, TDto>(Expression<Func<T, TS>> @orderby, bool isAsc = true) where TDto : class
  151. {
  152. return BaseDal.GetAllFromCache<TS, TDto>(orderby, isAsc);
  153. }
  154. /// <summary>
  155. /// 获取所有实体
  156. /// </summary>
  157. /// <typeparam name="TS">排序</typeparam>
  158. /// <typeparam name="TDto">映射实体</typeparam>
  159. /// <param name="orderby">排序字段</param>
  160. /// <param name="isAsc">是否升序</param>
  161. /// <returns>还未执行的SQL语句</returns>
  162. public Task<IEnumerable<TDto>> GetAllFromCacheAsync<TS, TDto>(Expression<Func<T, TS>> @orderby, bool isAsc = true) where TDto : class
  163. {
  164. return BaseDal.GetAllFromCacheAsync<TS, TDto>(orderby, isAsc);
  165. }
  166. /// <summary>
  167. /// 基本查询方法,获取一个集合
  168. /// </summary>
  169. /// <param name="where">查询条件</param>
  170. /// <returns>还未执行的SQL语句</returns>
  171. public virtual IQueryable<T> GetQuery(Expression<Func<T, bool>> @where)
  172. {
  173. return BaseDal.GetQuery(where);
  174. }
  175. /// <summary>
  176. /// 基本查询方法,获取一个集合
  177. /// </summary>
  178. /// <typeparam name="TS">排序</typeparam>
  179. /// <param name="where">查询条件</param>
  180. /// <param name="orderby">排序字段</param>
  181. /// <param name="isAsc">是否升序</param>
  182. /// <returns>还未执行的SQL语句</returns>
  183. IOrderedQueryable<T> IBaseService<T>.GetQuery<TS>(Expression<Func<T, bool>> @where, Expression<Func<T, TS>> @orderby, bool isAsc)
  184. {
  185. return BaseDal.GetQuery(where, orderby, isAsc);
  186. }
  187. /// <summary>
  188. /// 基本查询方法,获取一个被AutoMapper映射后的集合
  189. /// </summary>
  190. /// <param name="where">查询条件</param>
  191. /// <returns>还未执行的SQL语句</returns>
  192. public virtual IQueryable<TDto> GetQuery<TDto>(Expression<Func<T, bool>> @where) where TDto : class
  193. {
  194. return BaseDal.GetQuery<TDto>(where);
  195. }
  196. /// <summary>
  197. /// 基本查询方法,获取一个被AutoMapper映射后的集合
  198. /// </summary>
  199. /// <typeparam name="TS">排序字段</typeparam>
  200. /// <typeparam name="TDto">输出类型</typeparam>
  201. /// <param name="where">查询条件</param>
  202. /// <param name="orderby">排序字段</param>
  203. /// <param name="isAsc">是否升序</param>
  204. /// <returns>还未执行的SQL语句</returns>
  205. /// <returns></returns>
  206. public virtual IQueryable<TDto> GetQuery<TS, TDto>(Expression<Func<T, bool>> @where, Expression<Func<T, TS>> @orderby, bool isAsc = true) where TDto : class
  207. {
  208. return BaseDal.GetQuery<TS, TDto>(where, orderby, isAsc);
  209. }
  210. /// <summary>
  211. /// 基本查询方法,获取一个集合,优先从二级缓存读取
  212. /// </summary>
  213. /// <param name="where">查询条件</param>
  214. /// <returns>还未执行的SQL语句</returns>
  215. public virtual IEnumerable<T> GetQueryFromCache(Expression<Func<T, bool>> @where)
  216. {
  217. return BaseDal.GetQueryFromCache(where);
  218. }
  219. /// <summary>
  220. /// 基本查询方法,获取一个集合,优先从二级缓存读取
  221. /// </summary>
  222. /// <param name="where">查询条件</param>
  223. /// <returns>还未执行的SQL语句</returns>
  224. public Task<IEnumerable<T>> GetQueryFromCacheAsync(Expression<Func<T, bool>> @where)
  225. {
  226. return BaseDal.GetQueryFromCacheAsync(where);
  227. }
  228. /// <summary>
  229. /// 基本查询方法,获取一个集合,优先从二级缓存读取
  230. /// </summary>
  231. /// <typeparam name="TS">排序字段</typeparam>
  232. /// <param name="where">查询条件</param>
  233. /// <param name="orderby">排序方式</param>
  234. /// <param name="isAsc">是否升序</param>
  235. /// <returns>还未执行的SQL语句</returns>
  236. public virtual IEnumerable<T> GetQueryFromCache<TS>(Expression<Func<T, bool>> @where, Expression<Func<T, TS>> @orderby, bool isAsc = true)
  237. {
  238. return BaseDal.GetQueryFromCache(where, orderby, isAsc);
  239. }
  240. /// <summary>
  241. /// 基本查询方法,获取一个集合,优先从二级缓存读取
  242. /// </summary>
  243. /// <typeparam name="TS">排序字段</typeparam>
  244. /// <param name="where">查询条件</param>
  245. /// <param name="orderby">排序方式</param>
  246. /// <param name="isAsc">是否升序</param>
  247. /// <returns>还未执行的SQL语句</returns>
  248. public Task<IEnumerable<T>> GetQueryFromCacheAsync<TS>(Expression<Func<T, bool>> @where, Expression<Func<T, TS>> @orderby, bool isAsc = true)
  249. {
  250. return BaseDal.GetQueryFromCacheAsync(where, orderby, isAsc);
  251. }
  252. /// <summary>
  253. /// 基本查询方法,获取一个被AutoMapper映射后的集合,优先从二级缓存读取
  254. /// </summary>
  255. /// <param name="where">查询条件</param>
  256. /// <returns>还未执行的SQL语句</returns>
  257. public virtual IEnumerable<TDto> GetQueryFromCache<TDto>(Expression<Func<T, bool>> @where) where TDto : class
  258. {
  259. return BaseDal.GetQueryFromCache<TDto>(where);
  260. }
  261. /// <summary>
  262. /// 基本查询方法,获取一个被AutoMapper映射后的集合,优先从二级缓存读取
  263. /// </summary>
  264. /// <param name="where">查询条件</param>
  265. /// <returns>还未执行的SQL语句</returns>
  266. public Task<IEnumerable<TDto>> GetQueryFromCacheAsync<TDto>(Expression<Func<T, bool>> @where) where TDto : class
  267. {
  268. return BaseDal.GetQueryFromCacheAsync<TDto>(where);
  269. }
  270. /// <summary>
  271. /// 基本查询方法,获取一个被AutoMapper映射后的集合,优先从二级缓存读取
  272. /// </summary>
  273. /// <typeparam name="TS">排序字段</typeparam>
  274. /// <typeparam name="TDto">输出类型</typeparam>
  275. /// <param name="where">查询条件</param>
  276. /// <param name="orderby">排序方式</param>
  277. /// <param name="isAsc">是否升序</param>
  278. /// <returns>还未执行的SQL语句</returns>
  279. public virtual IEnumerable<TDto> GetQueryFromCache<TS, TDto>(Expression<Func<T, bool>> @where, Expression<Func<T, TS>> @orderby, bool isAsc = true) where TDto : class
  280. {
  281. return BaseDal.GetQueryFromCache<TS, TDto>(where, orderby, isAsc);
  282. }
  283. /// <summary>
  284. /// 基本查询方法,获取一个被AutoMapper映射后的集合,优先从二级缓存读取
  285. /// </summary>
  286. /// <typeparam name="TS">排序字段</typeparam>
  287. /// <typeparam name="TDto">输出类型</typeparam>
  288. /// <param name="where">查询条件</param>
  289. /// <param name="orderby">排序方式</param>
  290. /// <param name="isAsc">是否升序</param>
  291. /// <returns>还未执行的SQL语句</returns>
  292. public Task<IEnumerable<TDto>> GetQueryFromCacheAsync<TS, TDto>(Expression<Func<T, bool>> @where, Expression<Func<T, TS>> @orderby, bool isAsc = true) where TDto : class
  293. {
  294. return BaseDal.GetQueryFromCacheAsync<TS, TDto>(where, orderby, isAsc);
  295. }
  296. /// <summary>
  297. /// 基本查询方法,获取一个集合(不跟踪实体)
  298. /// </summary>
  299. /// <param name="where">查询条件</param>
  300. /// <returns>还未执行的SQL语句</returns>
  301. public virtual IQueryable<T> GetQueryNoTracking(Expression<Func<T, bool>> @where)
  302. {
  303. return BaseDal.GetQueryNoTracking(where);
  304. }
  305. /// <summary>
  306. /// 基本查询方法,获取一个集合(不跟踪实体)
  307. /// </summary>
  308. /// <typeparam name="TS">排序字段</typeparam>
  309. /// <param name="where">查询条件</param>
  310. /// <param name="orderby">排序方式</param>
  311. /// <param name="isAsc">是否升序</param>
  312. /// <returns>还未执行的SQL语句</returns>
  313. public virtual IOrderedQueryable<T> GetQueryNoTracking<TS>(Expression<Func<T, bool>> @where, Expression<Func<T, TS>> @orderby, bool isAsc = true)
  314. {
  315. return BaseDal.GetQueryNoTracking(where, orderby, isAsc);
  316. }
  317. /// <summary>
  318. /// 获取第一条数据
  319. /// </summary>
  320. /// <param name="where">查询条件</param>
  321. /// <returns>实体</returns>
  322. public virtual T Get(Expression<Func<T, bool>> @where)
  323. {
  324. return BaseDal.Get(where);
  325. }
  326. /// <summary>
  327. /// 获取第一条数据
  328. /// </summary>
  329. /// <param name="where">查询条件</param>
  330. /// <returns>实体</returns>
  331. public virtual T GetFromCache(Expression<Func<T, bool>> @where)
  332. {
  333. return BaseDal.GetFromCache(where);
  334. }
  335. /// <summary>
  336. /// 获取第一条数据
  337. /// </summary>
  338. /// <param name="where">查询条件</param>
  339. /// <returns>实体</returns>
  340. public Task<T> GetFromCacheAsync(Expression<Func<T, bool>> @where)
  341. {
  342. return BaseDal.GetFromCacheAsync(where);
  343. }
  344. /// <summary>
  345. /// 获取第一条数据
  346. /// </summary>
  347. /// <typeparam name="TS">排序</typeparam>
  348. /// <param name="where">查询条件</param>
  349. /// <param name="orderby">排序字段</param>
  350. /// <param name="isAsc">是否升序</param>
  351. /// <returns>实体</returns>
  352. public virtual T Get<TS>(Expression<Func<T, bool>> @where, Expression<Func<T, TS>> @orderby, bool isAsc = true)
  353. {
  354. return BaseDal.Get(where, orderby, isAsc);
  355. }
  356. /// <summary>
  357. /// 获取第一条数据
  358. /// </summary>
  359. /// <typeparam name="TS">排序</typeparam>
  360. /// <param name="where">查询条件</param>
  361. /// <param name="orderby">排序字段</param>
  362. /// <param name="isAsc">是否升序</param>
  363. /// <returns>实体</returns>
  364. public T GetFromCache<TS>(Expression<Func<T, bool>> @where, Expression<Func<T, TS>> @orderby, bool isAsc = true)
  365. {
  366. return BaseDal.GetFromCache(where, orderby, isAsc);
  367. }
  368. /// <summary>
  369. /// 获取第一条数据
  370. /// </summary>
  371. /// <typeparam name="TS">排序</typeparam>
  372. /// <param name="where">查询条件</param>
  373. /// <param name="orderby">排序字段</param>
  374. /// <param name="isAsc">是否升序</param>
  375. /// <returns>实体</returns>
  376. public Task<T> GetFromCacheAsync<TS>(Expression<Func<T, bool>> @where, Expression<Func<T, TS>> @orderby, bool isAsc = true)
  377. {
  378. return BaseDal.GetFromCacheAsync(where, orderby, isAsc);
  379. }
  380. /// <summary>
  381. /// 获取第一条被AutoMapper映射后的数据
  382. /// </summary>
  383. /// <param name="where">查询条件</param>
  384. /// <returns>实体</returns>
  385. public virtual TDto Get<TDto>(Expression<Func<T, bool>> @where) where TDto : class
  386. {
  387. return BaseDal.Get<TDto>(where);
  388. }
  389. /// <summary>
  390. /// 获取第一条被AutoMapper映射后的数据
  391. /// </summary>
  392. /// <param name="where">查询条件</param>
  393. /// <returns>实体</returns>
  394. public TDto GetFromCache<TDto>(Expression<Func<T, bool>> @where) where TDto : class
  395. {
  396. return BaseDal.GetFromCache<TDto>(where);
  397. }
  398. /// <summary>
  399. /// 获取第一条被AutoMapper映射后的数据
  400. /// </summary>
  401. /// <param name="where">查询条件</param>
  402. /// <returns>实体</returns>
  403. public Task<TDto> GetFromCacheAsync<TDto>(Expression<Func<T, bool>> @where) where TDto : class
  404. {
  405. return BaseDal.GetFromCacheAsync<TDto>(where);
  406. }
  407. /// <summary>
  408. /// 获取第一条被AutoMapper映射后的数据
  409. /// </summary>
  410. /// <typeparam name="TS">排序</typeparam>
  411. /// <typeparam name="TDto">映射实体</typeparam>
  412. /// <param name="where">查询条件</param>
  413. /// <param name="orderby">排序字段</param>
  414. /// <param name="isAsc">是否升序</param>
  415. /// <returns>映射实体</returns>
  416. public virtual TDto Get<TS, TDto>(Expression<Func<T, bool>> @where, Expression<Func<T, TS>> @orderby, bool isAsc = true) where TDto : class
  417. {
  418. return BaseDal.Get<TS, TDto>(where, orderby, isAsc);
  419. }
  420. /// <summary>
  421. /// 获取第一条被AutoMapper映射后的数据
  422. /// </summary>
  423. /// <typeparam name="TS">排序</typeparam>
  424. /// <typeparam name="TDto">映射实体</typeparam>
  425. /// <param name="where">查询条件</param>
  426. /// <param name="orderby">排序字段</param>
  427. /// <param name="isAsc">是否升序</param>
  428. /// <returns>映射实体</returns>
  429. public Task<TDto> GetAsync<TS, TDto>(Expression<Func<T, bool>> @where, Expression<Func<T, TS>> @orderby, bool isAsc = true) where TDto : class
  430. {
  431. return BaseDal.GetAsync<TS, TDto>(where, orderby, isAsc);
  432. }
  433. /// <summary>
  434. /// 获取第一条被AutoMapper映射后的数据
  435. /// </summary>
  436. /// <typeparam name="TS">排序</typeparam>
  437. /// <typeparam name="TDto">映射实体</typeparam>
  438. /// <param name="where">查询条件</param>
  439. /// <param name="orderby">排序字段</param>
  440. /// <param name="isAsc">是否升序</param>
  441. /// <returns>映射实体</returns>
  442. public TDto GetFromCache<TS, TDto>(Expression<Func<T, bool>> @where, Expression<Func<T, TS>> @orderby, bool isAsc = true) where TDto : class
  443. {
  444. return BaseDal.GetFromCache<TS, TDto>(where, orderby, isAsc);
  445. }
  446. /// <summary>
  447. /// 获取第一条被AutoMapper映射后的数据
  448. /// </summary>
  449. /// <typeparam name="TS">排序</typeparam>
  450. /// <typeparam name="TDto">映射实体</typeparam>
  451. /// <param name="where">查询条件</param>
  452. /// <param name="orderby">排序字段</param>
  453. /// <param name="isAsc">是否升序</param>
  454. /// <returns>映射实体</returns>
  455. public Task<TDto> GetFromCacheAsync<TS, TDto>(Expression<Func<T, bool>> @where, Expression<Func<T, TS>> @orderby, bool isAsc = true) where TDto : class
  456. {
  457. return BaseDal.GetFromCacheAsync<TS, TDto>(where, orderby, isAsc);
  458. }
  459. /// <summary>
  460. /// 获取第一条数据
  461. /// </summary>
  462. /// <typeparam name="TS">排序</typeparam>
  463. /// <param name="where">查询条件</param>
  464. /// <param name="orderby">排序字段</param>
  465. /// <param name="isAsc">是否升序</param>
  466. /// <returns>实体</returns>
  467. public virtual async Task<T> GetAsync<TS>(Expression<Func<T, bool>> @where, Expression<Func<T, TS>> @orderby, bool isAsc = true)
  468. {
  469. return await BaseDal.GetAsync(where, orderby, isAsc);
  470. }
  471. /// <summary>
  472. /// 获取第一条数据,优先从缓存读取
  473. /// </summary>
  474. /// <param name="where">查询条件</param>
  475. /// <returns>实体</returns>
  476. public virtual async Task<T> GetAsync(Expression<Func<T, bool>> @where)
  477. {
  478. return await BaseDal.GetAsync(where);
  479. }
  480. /// <summary>
  481. /// 获取第一条数据(不跟踪实体)
  482. /// </summary>
  483. /// <param name="where">查询条件</param>
  484. /// <returns>实体</returns>
  485. public virtual T GetNoTracking(Expression<Func<T, bool>> @where)
  486. {
  487. return BaseDal.GetNoTracking(where);
  488. }
  489. /// <summary>
  490. /// 获取第一条数据(不跟踪实体)
  491. /// </summary>
  492. /// <typeparam name="TS">排序</typeparam>
  493. /// <param name="where">查询条件</param>
  494. /// <param name="orderby">排序字段</param>
  495. /// <param name="isAsc">是否升序</param>
  496. /// <returns>实体</returns>
  497. public virtual T GetNoTracking<TS>(Expression<Func<T, bool>> @where, Expression<Func<T, TS>> @orderby, bool isAsc = true)
  498. {
  499. return BaseDal.GetNoTracking(where, orderby, isAsc);
  500. }
  501. /// <summary>
  502. /// 获取第一条数据(异步,不跟踪实体)
  503. /// </summary>
  504. /// <param name="where">查询条件</param>
  505. /// <returns>实体</returns>
  506. public virtual async Task<T> GetNoTrackingAsync(Expression<Func<T, bool>> @where)
  507. {
  508. return await BaseDal.GetNoTrackingAsync(where);
  509. }
  510. /// <summary>
  511. /// 获取第一条数据(异步,不跟踪实体)
  512. /// </summary>
  513. /// <typeparam name="TS">排序</typeparam>
  514. /// <param name="where">查询条件</param>
  515. /// <param name="orderby">排序字段</param>
  516. /// <param name="isAsc">是否升序</param>
  517. /// <returns>实体</returns>
  518. public virtual async Task<T> GetNoTrackingAsync<TS>(Expression<Func<T, bool>> @where, Expression<Func<T, TS>> @orderby, bool isAsc = true)
  519. {
  520. return await BaseDal.GetNoTrackingAsync(where, orderby, isAsc);
  521. }
  522. /// <summary>
  523. /// 根据ID找实体
  524. /// </summary>
  525. /// <param name="id">实体id</param>
  526. /// <returns>实体</returns>
  527. public virtual T GetById(object id)
  528. {
  529. return BaseDal.GetById(id);
  530. }
  531. /// <summary>
  532. /// 根据ID找实体(异步)
  533. /// </summary>
  534. /// <param name="id">实体id</param>
  535. /// <returns>实体</returns>
  536. public virtual async Task<T> GetByIdAsync(object id)
  537. {
  538. return await BaseDal.GetByIdAsync(id);
  539. }
  540. /// <summary>
  541. /// 高效分页查询方法
  542. /// </summary>
  543. /// <typeparam name="TS"></typeparam>
  544. /// <param name="pageIndex">第几页</param>
  545. /// <param name="pageSize">每页大小</param>
  546. /// <param name="where">where Lambda条件表达式</param>
  547. /// <param name="orderby">orderby Lambda条件表达式</param>
  548. /// <param name="isAsc">升序降序</param>
  549. /// <returns>还未执行的SQL语句</returns>
  550. public virtual PagedList<T> GetPages<TS>(int pageIndex, int pageSize, Expression<Func<T, bool>> where, Expression<Func<T, TS>> orderby, bool isAsc = true)
  551. {
  552. return BaseDal.GetPages(pageIndex, pageSize, where, orderby, isAsc);
  553. }
  554. /// <summary>
  555. /// 高效分页查询方法,取出被AutoMapper映射后的数据集合
  556. /// </summary>
  557. /// <typeparam name="TS">排序字段</typeparam>
  558. /// <typeparam name="TDto">映射实体</typeparam>
  559. /// <param name="pageIndex">第几页</param>
  560. /// <param name="pageSize">每页大小</param>
  561. /// <param name="where">where Lambda条件表达式</param>
  562. /// <param name="orderby">orderby Lambda条件表达式</param>
  563. /// <param name="isAsc">升序降序</param>
  564. /// <returns>还未执行的SQL语句</returns>
  565. public virtual PagedList<TDto> GetPages<TS, TDto>(int pageIndex, int pageSize, Expression<Func<T, bool>> @where, Expression<Func<T, TS>> @orderby, bool isAsc) where TDto : class
  566. {
  567. return BaseDal.GetPages<TS, TDto>(pageIndex, pageSize, where, orderby, isAsc);
  568. }
  569. /// <summary>
  570. /// 高效分页查询方法,优先从二级缓存读取
  571. /// </summary>
  572. /// <typeparam name="TS">排序字段</typeparam>
  573. /// <param name="pageIndex">第几页</param>
  574. /// <param name="pageSize">每页大小</param>
  575. /// <param name="where">where Lambda条件表达式</param>
  576. /// <param name="orderby">orderby Lambda条件表达式</param>
  577. /// <param name="isAsc">升序降序</param>
  578. /// <returns>还未执行的SQL语句</returns>
  579. public virtual PagedList<T> GetPagesFromCache<TS>(int pageIndex, int pageSize, Expression<Func<T, bool>> @where, Expression<Func<T, TS>> @orderby, bool isAsc = true)
  580. {
  581. return BaseDal.GetPagesFromCache(pageIndex, pageSize, where, orderby, isAsc);
  582. }
  583. /// <summary>
  584. /// 高效分页查询方法,优先从二级缓存读取
  585. /// </summary>
  586. /// <typeparam name="TS"></typeparam>
  587. /// <param name="pageIndex">第几页</param>
  588. /// <param name="pageSize">每页大小</param>
  589. /// <param name="where">where Lambda条件表达式</param>
  590. /// <param name="orderby">orderby Lambda条件表达式</param>
  591. /// <param name="isAsc">升序降序</param>
  592. /// <returns>还未执行的SQL语句</returns>
  593. public Task<PagedList<T>> GetPagesFromCacheAsync<TS>(int pageIndex, int pageSize, Expression<Func<T, bool>> @where, Expression<Func<T, TS>> @orderby, bool isAsc)
  594. {
  595. return BaseDal.GetPagesFromCacheAsync(pageIndex, pageSize, where, orderby, isAsc);
  596. }
  597. /// <summary>
  598. /// 高效分页查询方法,优先从二级缓存读取,取出被AutoMapper映射后的数据集合
  599. /// </summary>
  600. /// <typeparam name="TS">排序字段</typeparam>
  601. /// <typeparam name="TDto">映射实体</typeparam>
  602. /// <param name="pageIndex">第几页</param>
  603. /// <param name="pageSize">每页大小</param>
  604. /// <param name="where">where Lambda条件表达式</param>
  605. /// <param name="orderby">orderby Lambda条件表达式</param>
  606. /// <param name="isAsc">升序降序</param>
  607. /// <returns>还未执行的SQL语句</returns>
  608. public virtual PagedList<TDto> GetPagesFromCache<TS, TDto>(int pageIndex, int pageSize, Expression<Func<T, bool>> @where, Expression<Func<T, TS>> @orderby, bool isAsc) where TDto : class
  609. {
  610. return BaseDal.GetPagesFromCache<TS, TDto>(pageIndex, pageSize, where, orderby, isAsc);
  611. }
  612. /// <summary>
  613. /// 高效分页查询方法,优先从二级缓存读取,取出被AutoMapper映射后的数据集合
  614. /// </summary>
  615. /// <typeparam name="TS"></typeparam>
  616. /// <typeparam name="TDto"></typeparam>
  617. /// <param name="pageIndex">第几页</param>
  618. /// <param name="pageSize">每页大小</param>
  619. /// <param name="where">where Lambda条件表达式</param>
  620. /// <param name="orderby">orderby Lambda条件表达式</param>
  621. /// <param name="isAsc">升序降序</param>
  622. /// <returns>还未执行的SQL语句</returns>
  623. public Task<PagedList<TDto>> GetPagesFromCacheAsync<TS, TDto>(int pageIndex, int pageSize, Expression<Func<T, bool>> @where, Expression<Func<T, TS>> @orderby, bool isAsc) where TDto : class
  624. {
  625. return BaseDal.GetPagesFromCacheAsync<TS, TDto>(pageIndex, pageSize, where, orderby, isAsc);
  626. }
  627. /// <summary>
  628. /// 高效分页查询方法(不跟踪实体)
  629. /// </summary>
  630. /// <typeparam name="TS">排序字段</typeparam>
  631. /// <param name="pageIndex">第几页</param>
  632. /// <param name="pageSize">每页大小</param>
  633. /// <param name="where">where Lambda条件表达式</param>
  634. /// <param name="orderby">orderby Lambda条件表达式</param>
  635. /// <param name="isAsc">升序降序</param>
  636. /// <returns>还未执行的SQL语句</returns>
  637. public virtual PagedList<T> GetPagesNoTracking<TS>(int pageIndex, int pageSize, Expression<Func<T, bool>> @where, Expression<Func<T, TS>> @orderby, bool isAsc = true)
  638. {
  639. return BaseDal.GetPagesNoTracking(pageIndex, pageSize, where, orderby, isAsc);
  640. }
  641. /// <summary>
  642. /// 根据ID删除实体
  643. /// </summary>
  644. /// <param name="id">实体id</param>
  645. /// <returns>删除成功</returns>
  646. public virtual bool DeleteById(object id)
  647. {
  648. return BaseDal.DeleteById(id);
  649. }
  650. /// <summary>
  651. /// 根据ID删除实体并保存
  652. /// </summary>
  653. /// <param name="id">实体id</param>
  654. /// <returns>删除成功</returns>
  655. public virtual bool DeleteByIdSaved(object id)
  656. {
  657. BaseDal.DeleteById(id);
  658. return SaveChanges() > 0;
  659. }
  660. /// <summary>
  661. /// 根据ID删除实体并保存(异步)
  662. /// </summary>
  663. /// <param name="id">实体id</param>
  664. /// <returns>删除成功</returns>
  665. public virtual async Task<int> DeleteByIdSavedAsync(object id)
  666. {
  667. BaseDal.DeleteById(id);
  668. return await SaveChangesAsync();
  669. }
  670. /// <summary>
  671. /// 删除实体并保存
  672. /// </summary>
  673. /// <param name="t">需要删除的实体</param>
  674. /// <returns>删除成功</returns>
  675. public virtual bool DeleteEntity(T t)
  676. {
  677. return BaseDal.DeleteEntity(t);
  678. }
  679. /// <summary>
  680. /// 根据条件删除实体
  681. /// </summary>
  682. /// <param name="where">查询条件</param>
  683. /// <returns>删除成功</returns>
  684. public virtual int DeleteEntity(Expression<Func<T, bool>> @where)
  685. {
  686. return BaseDal.DeleteEntity(where);
  687. }
  688. /// <summary>
  689. /// 根据条件删除实体
  690. /// </summary>
  691. /// <param name="where">查询条件</param>
  692. /// <returns>删除成功</returns>
  693. public virtual int DeleteEntitySaved(Expression<Func<T, bool>> @where)
  694. {
  695. BaseDal.DeleteEntity(where);
  696. return SaveChanges();
  697. }
  698. /// <summary>
  699. /// 根据条件删除实体
  700. /// </summary>
  701. /// <param name="where">查询条件</param>
  702. /// <returns>删除成功</returns>
  703. public virtual async Task<int> DeleteEntitySavedAsync(Expression<Func<T, bool>> @where)
  704. {
  705. BaseDal.DeleteEntity(where);
  706. return await SaveChangesAsync();
  707. }
  708. /// <summary>
  709. /// 根据条件删除实体(异步)
  710. /// </summary>
  711. /// <param name="where">查询条件</param>
  712. /// <returns>删除成功</returns>
  713. public virtual async Task<int> DeleteEntityAsync(Expression<Func<T, bool>> @where)
  714. {
  715. return await BaseDal.DeleteEntityAsync(where);
  716. }
  717. /// <summary>
  718. /// 删除实体并保存
  719. /// </summary>
  720. /// <param name="t">需要删除的实体</param>
  721. /// <returns>删除成功</returns>
  722. public virtual bool DeleteEntitySaved(T t)
  723. {
  724. BaseDal.DeleteEntity(t);
  725. return SaveChanges() > 0;
  726. }
  727. /// <summary>
  728. /// 删除实体并保存(异步)
  729. /// </summary>
  730. /// <param name="t">需要删除的实体</param>
  731. /// <returns>删除成功</returns>
  732. public virtual async Task<int> DeleteEntitySavedAsync(T t)
  733. {
  734. BaseDal.DeleteEntity(t);
  735. return await SaveChangesAsync();
  736. }
  737. /// <summary>
  738. /// 添加实体
  739. /// </summary>
  740. /// <param name="t">需要添加的实体</param>
  741. /// <returns>添加成功</returns>
  742. public virtual T AddEntity(T t)
  743. {
  744. return BaseDal.AddEntity(t);
  745. }
  746. /// <summary>
  747. /// 添加或更新实体
  748. /// </summary>
  749. /// <param name="key">更新键规则</param>
  750. /// <param name="t">需要保存的实体</param>
  751. /// <returns>保存成功</returns>
  752. public T AddOrUpdate<TKey>(Expression<Func<T, TKey>> key, T t)
  753. {
  754. return BaseDal.AddOrUpdate(key, t);
  755. }
  756. /// <summary>
  757. /// 添加或更新实体
  758. /// </summary>
  759. /// <param name="key">更新键规则</param>
  760. /// <param name="entities">需要保存的实体</param>
  761. /// <returns>保存成功</returns>
  762. public void AddOrUpdate<TKey>(Expression<Func<T, TKey>> key, params T[] entities)
  763. {
  764. BaseDal.AddOrUpdate(key, entities);
  765. }
  766. /// <summary>
  767. /// 添加或更新实体
  768. /// </summary>
  769. /// <param name="key">更新键规则</param>
  770. /// <param name="entities">需要保存的实体</param>
  771. /// <returns>保存成功</returns>
  772. public void AddOrUpdate<TKey>(Expression<Func<T, TKey>> key, IEnumerable<T> entities)
  773. {
  774. BaseDal.AddOrUpdate(key, entities);
  775. }
  776. /// <summary>
  777. /// 添加实体并保存
  778. /// </summary>
  779. /// <param name="t">需要添加的实体</param>
  780. /// <returns>添加成功</returns>
  781. public virtual T AddEntitySaved(T t)
  782. {
  783. T entity = BaseDal.AddEntity(t);
  784. bool b = SaveChanges() > 0;
  785. return b ? entity : null;
  786. }
  787. /// <summary>
  788. /// 添加或更新实体
  789. /// </summary>
  790. /// <param name="key">更新键规则</param>
  791. /// <param name="t">需要保存的实体</param>
  792. /// <returns>保存成功</returns>
  793. public T AddOrUpdateSaved<TKey>(Expression<Func<T, TKey>> key, T t)
  794. {
  795. BaseDal.AddOrUpdate(key, t);
  796. var b = BaseDal.SaveChanges() > 0;
  797. return b ? t : null;
  798. }
  799. /// <summary>
  800. /// 添加或更新实体
  801. /// </summary>
  802. /// <param name="key">更新键规则</param>
  803. /// <param name="entities">需要保存的实体</param>
  804. /// <returns>保存成功</returns>
  805. public bool AddOrUpdateSaved<TKey>(Expression<Func<T, TKey>> key, params T[] entities)
  806. {
  807. AddOrUpdate(key, entities);
  808. return SaveChanges() > 0;
  809. }
  810. /// <summary>
  811. /// 添加或更新实体
  812. /// </summary>
  813. /// <param name="key">更新键规则</param>
  814. /// <param name="t">需要保存的实体</param>
  815. /// <returns>保存成功</returns>
  816. public async Task<int> AddOrUpdateSavedAsync<TKey>(Expression<Func<T, TKey>> key, T t)
  817. {
  818. AddOrUpdate(key, t);
  819. return await SaveChangesAsync();
  820. }
  821. /// <summary>
  822. /// 添加或更新实体
  823. /// </summary>
  824. /// <param name="key">更新键规则</param>
  825. /// <param name="entities">需要保存的实体</param>
  826. /// <returns>保存成功</returns>
  827. public async Task<int> AddOrUpdateSavedAsync<TKey>(Expression<Func<T, TKey>> key, IEnumerable<T> entities)
  828. {
  829. AddOrUpdate(key, entities);
  830. return await SaveChangesAsync();
  831. }
  832. /// <summary>
  833. /// 添加实体并保存(异步)
  834. /// </summary>
  835. /// <param name="t">需要添加的实体</param>
  836. /// <returns>添加成功</returns>
  837. public virtual async Task<int> AddEntitySavedAsync(T t)
  838. {
  839. BaseDal.AddEntity(t);
  840. return await SaveChangesAsync();
  841. }
  842. /// <summary>
  843. /// 统一保存的方法
  844. /// </summary>
  845. /// <returns>受影响的行数</returns>
  846. public virtual int SaveChanges()
  847. {
  848. return BaseDal.SaveChanges();
  849. }
  850. /// <summary>
  851. /// 统一保存数据
  852. /// </summary>
  853. /// <returns>受影响的行数</returns>
  854. public virtual async Task<int> SaveChangesAsync()
  855. {
  856. return await BaseDal.SaveChangesAsync();
  857. }
  858. /// <summary>
  859. /// 判断实体是否在数据库中存在
  860. /// </summary>
  861. /// <param name="where">查询条件</param>
  862. /// <returns>是否存在</returns>
  863. public virtual bool Any(Expression<Func<T, bool>> @where)
  864. {
  865. return BaseDal.Any(where);
  866. }
  867. /// <summary>
  868. /// 统计符合条件的个数
  869. /// </summary>
  870. /// <param name="where">查询条件</param>
  871. /// <returns></returns>
  872. public int Count(Expression<Func<T, bool>> @where)
  873. {
  874. return BaseDal.Count(where);
  875. }
  876. /// <summary>
  877. /// 删除多个实体
  878. /// </summary>
  879. /// <param name="list">实体集合</param>
  880. /// <returns>删除成功</returns>
  881. public virtual bool DeleteEntities(IEnumerable<T> list)
  882. {
  883. return BaseDal.DeleteEntities(list);
  884. }
  885. /// <summary>
  886. /// 删除多个实体并保存
  887. /// </summary>
  888. /// <param name="list">实体集合</param>
  889. /// <returns>删除成功</returns>
  890. public virtual bool DeleteEntitiesSaved(IEnumerable<T> list)
  891. {
  892. BaseDal.DeleteEntities(list);
  893. return SaveChanges() > 0;
  894. }
  895. /// <summary>
  896. /// 删除多个实体并保存(异步)
  897. /// </summary>
  898. /// <param name="list">实体集合</param>
  899. /// <returns>删除成功</returns>
  900. public virtual async Task<int> DeleteEntitiesSavedAsync(IEnumerable<T> list)
  901. {
  902. BaseDal.DeleteEntities(list);
  903. return await SaveChangesAsync();
  904. }
  905. /// <summary>
  906. /// 添加多个实体并保存
  907. /// </summary>
  908. /// <param name="list">实体集合</param>
  909. /// <returns>添加成功</returns>
  910. public virtual IEnumerable<T> AddEntities(IList<T> list)
  911. {
  912. IEnumerable<T> entities = BaseDal.AddEntities(list);
  913. SaveChanges();
  914. return entities;
  915. }
  916. /// <summary>
  917. /// 添加多个实体并保存(异步)
  918. /// </summary>
  919. /// <param name="list">实体集合</param>
  920. /// <returns>添加成功</returns>
  921. public virtual async Task<IEnumerable<T>> AddEntitiesAsync(IList<T> list)
  922. {
  923. IEnumerable<T> entities = BaseDal.AddEntities(list);
  924. await SaveChangesAsync();
  925. return entities;
  926. }
  927. }
  928. }