net core 使用 SqlSugar

 1  /// <summary>
 2     /// SqlSugar 注入Service的擴展方法  3     /// </summary>
 4     public static class SqlSugarServiceCollectionExtensions  5  {  6         /// <summary>
 7         /// SqlSugar上下文注入  8         /// </summary>
 9         /// <typeparam name="TSugarContext">要註冊的上下文的類型</typeparam>
10         /// <param name="serviceCollection"></param>
11         /// <param name="configAction"></param>
12         /// <param name="lifetime">用於在容器中註冊TSugarClient服務的生命週期</param>
13         /// <returns></returns>
14         public static IServiceCollection AddSqlSugarClient<TSugarContext>(this IServiceCollection serviceCollection, Action<IServiceProvider, ConnectionConfig> configAction, ServiceLifetime lifetime = ServiceLifetime.Singleton) 15             where TSugarContext : IDbFactory 16  { 17  serviceCollection.AddMemoryCache().AddLogging(); 18             serviceCollection.TryAdd(new ServiceDescriptor(typeof(ConnectionConfig), p => ConnectionConfigFactory(p, configAction), lifetime)); 19             serviceCollection.Add(new ServiceDescriptor(typeof(ConnectionConfig), p => ConnectionConfigFactory(p, configAction), lifetime)); 20             serviceCollection.TryAdd(new ServiceDescriptor(typeof(TSugarContext), typeof(TSugarContext), lifetime)); 21             return serviceCollection; 22  } 23 
24         private static ConnectionConfig ConnectionConfigFactory(IServiceProvider applicationServiceProvider, Action<IServiceProvider, ConnectionConfig> configAction) 25  { 26             var config = new ConnectionConfig(); 27  configAction.Invoke(applicationServiceProvider, config); 28             return config; 29  } 30     }
注入擴展
1 public interface IDbFactory 2  { 3         SqlSugarClient GetDbContext(Action<Exception> onErrorEvent); 4         SqlSugarClient GetDbContext(Action<string, SugarParameter[]> onExecutedEvent); 5         SqlSugarClient GetDbContext(Func<string, SugarParameter[], KeyValuePair<string, SugarParameter[]>> onExecutingChangeSqlEvent); 6         SqlSugarClient GetDbContext(Action<string, SugarParameter[]> onExecutedEvent = null, Func<string, SugarParameter[], KeyValuePair<string, SugarParameter[]>> onExecutingChangeSqlEvent = null, Action<Exception> onErrorEvent = null); 7     }
IDbFactory
 1 public class DbFactory : IDbFactory  2  {  3         private readonly ILogger _logger;  4         private readonly ConnectionConfig _config;  5 
 6         public DbFactory(ConnectionConfig config, ILogger<DbFactory> logger)  7  {  8             this._logger = logger;  9             this._config = config; 10  } 11 
12         public SqlSugarClient GetDbContext(Action<Exception> onErrorEvent) => GetDbContext(null, null, onErrorEvent); 13         public SqlSugarClient GetDbContext(Action<string, SugarParameter[]> onExecutedEvent) => GetDbContext(onExecutedEvent); 14         public SqlSugarClient GetDbContext(Func<string, SugarParameter[], KeyValuePair<string, SugarParameter[]>> onExecutingChangeSqlEvent) => GetDbContext(null, onExecutingChangeSqlEvent); 15         public SqlSugarClient GetDbContext(Action<string, SugarParameter[]> onExecutedEvent = null, Func<string, SugarParameter[], KeyValuePair<string, SugarParameter[]>> onExecutingChangeSqlEvent = null, Action<Exception> onErrorEvent = null) 16  { 17             SqlSugarClient db = new SqlSugarClient(_config) 18  { 19                 Aop =
20  { 21                         OnExecutingChangeSql = onExecutingChangeSqlEvent, 22                         OnError = onErrorEvent ?? ((Exception ex) => { this._logger.LogError(ex, "ExecuteSql Error"); }), 23                         OnLogExecuted =onExecutedEvent?? ((string sql, SugarParameter[] pars) =>
24  { 25                             var keyDic = new KeyValuePair<string, SugarParameter[]>(sql, pars); 26                             this._logger.LogInformation($"ExecuteSql:【{keyDic.ToJson()}】"); 27  }) 28  } 29  }; 30             return db; 31  } 32     }
DbFactory
public interface IRepository { }
IRepository
 1  public class Repository<TFactory, TIRepository> : IRepository where TFactory : IDbFactory where TIRepository : IRepository  2  {  3         protected readonly ILogger Log;  4         protected readonly TFactory Factory;  5         protected readonly TIRepository DbRepository;  6         protected SqlSugarClient DbContext => this.Factory.GetDbContext();  7 
 8         public Repository(TFactory factory) => Factory = factory;  9         public Repository(TFactory factory, ILogger logger) : this(factory) => Log = logger; 10         public Repository(TFactory factory, TIRepository repository) : this(factory) => DbRepository = repository; 11         public Repository(TFactory factory, TIRepository repository, ILogger logger) : this(factory, repository) => Log = logger; 12  } 13 
14     public class Repository<TFactory> : IRepository where TFactory : IDbFactory 15  { 16         protected readonly ILogger Log; 17         protected readonly TFactory Factory; 18         protected SqlSugarClient DbContext => this.Factory.GetDbContext(); 19 
20         public Repository(TFactory factory) => Factory = factory; 21         public Repository(TFactory factory, ILogger logger) : this(factory) => Log = logger; 22     }
Repository
 1   public static class SugarFactoryExtensions  2  {  3 
 4         #region 根據主鍵獲取實體對象
 5 
 6         /// <summary>
 7         /// 根據主鍵獲取實體對象  8         /// </summary>
 9         /// <typeparam name="TSource">數據源類型</typeparam>
 10         /// <param name="db"></param>
 11         /// <param name="id"></param>
 12         /// <returns></returns>
 13         public static TSource GetById<TSource>(this SqlSugarClient db, dynamic id) where TSource : EntityBase, new()  14  {  15             return db.Queryable<TSource>().InSingle(id);  16  }  17 
 18         /// <summary>
 19         /// 根據主鍵獲取實體對象  20         /// </summary>
 21         /// <typeparam name="TSource">數據源類型</typeparam>
 22         /// <typeparam name="TMap">數據源映射類型</typeparam>
 23         /// <param name="db"></param>
 24         /// <param name="id"></param>
 25         /// <returns></returns>
 26         public static TMap GetById<TSource, TMap>(this SqlSugarClient db, dynamic id) where TSource : EntityBase, new()  27  {  28             TSource model = db.Queryable<TSource>().InSingle(id);  29             return model.Map<TSource, TMap>();  30  }  31 
 32         #endregion
 33 
 34         #region 根據Linq表達式條件獲取單個實體對象
 35 
 36         /// <summary>
 37         /// 根據條件獲取單個實體對象  38         /// </summary>
 39         /// <typeparam name="TSource">數據源類型</typeparam>
 40         /// <param name="db"></param>
 41         /// <param name="whereExp"></param>
 42         /// <returns></returns>
 43         public static TSource Get<TSource>(this SqlSugarClient db, Expression<Func<TSource, bool>> whereExp) where TSource : EntityBase, new()  44  {  45             return db.Queryable<TSource>().Where(whereExp).Single();  46  }  47 
 48         /// <summary>
 49         /// 根據條件獲取單個實體對象  50         /// </summary>
 51         /// <typeparam name="TSource">數據源類型</typeparam>
 52         /// <typeparam name="TMap">數據源映射類型</typeparam>
 53         /// <param name="db"></param>
 54         /// <param name="whereExp">條件表達式</param>
 55         /// <returns></returns>
 56         public static TMap Get<TSource, TMap>(this SqlSugarClient db, Expression<Func<TSource, bool>> whereExp) where TSource : EntityBase, new()  57  {  58             TSource model = db.Queryable<TSource>().Where(whereExp).Single();  59             return model.Map<TSource, TMap>();  60  }  61 
 62         #endregion
 63 
 64         #region 獲取全部實體列表
 65 
 66         /// <summary>
 67         /// 獲取全部實體列表  68         /// </summary>
 69         /// <typeparam name="TSource">數據源類型</typeparam>
 70         /// <param name="db"></param>
 71         /// <returns></returns>
 72         public static List<TSource> GetList<TSource>(this SqlSugarClient db) where TSource : EntityBase, new()  73  {  74             return db.Queryable<TSource>().ToList();  75  }  76 
 77         /// <summary>
 78         /// 獲取實體列表  79         /// </summary>
 80         /// <typeparam name="TSource">數據源類型</typeparam>
 81         /// <typeparam name="TMap">數據源映射類型</typeparam>
 82         /// <param name="db"></param>
 83         /// <returns></returns>
 84         public static List<TMap> GetList<TSource, TMap>(this SqlSugarClient db) where TSource : EntityBase, new()  85  {  86             var result = db.Queryable<TSource>().ToList();  87             return result.Map<List<TSource>, List<TMap>>();  88  }  89 
 90         #endregion
 91 
 92         #region 根據Linq表達式條件獲取列表
 93 
 94         /// <summary>
 95         /// 根據條件獲取實體列表  96         /// </summary>
 97         /// <typeparam name="TSource">數據源類型</typeparam>
 98         /// <param name="db"></param>
 99         /// <param name="whereExp">條件表達式</param>
100         /// <returns></returns>
101         public static List<TSource> GetList<TSource>(this SqlSugarClient db, Expression<Func<TSource, bool>> whereExp) where TSource : EntityBase, new() 102  { 103             return db.Queryable<TSource>().Where(whereExp).ToList(); 104  } 105 
106         /// <summary>
107         /// 根據條件獲取實體列表 108         /// </summary>
109         /// <typeparam name="TSource">數據源類型</typeparam>
110         /// <typeparam name="TMap">數據源映射類型</typeparam>
111         /// <param name="db"></param>
112         /// <param name="whereExp">條件表達式</param>
113         /// <returns></returns>
114         public static List<TMap> GetList<TSource, TMap>(this SqlSugarClient db, Expression<Func<TSource, bool>> whereExp) where TSource : EntityBase, new() 115  { 116             var result = db.Queryable<TSource>().Where(whereExp).ToList(); 117             return result.Map<List<TSource>, List<TMap>>(); 118  } 119 
120         #endregion
121 
122         #region 根據Sugar條件獲取列表
123 
124         /// <summary>
125         /// 根據條件獲取實體列表 126         /// </summary>
127         /// <typeparam name="TSource"></typeparam>
128         /// <param name="db"></param>
129         /// <param name="conditionals">Sugar調價表達式集合</param>
130         /// <returns></returns>
131         public static List<TSource> GetList<TSource>(this SqlSugarClient db, List<IConditionalModel> conditionals) where TSource : EntityBase, new() 132  { 133             return db.Queryable<TSource>().Where(conditionals).ToList(); 134  } 135 
136         /// <summary>
137         /// 根據條件獲取實體列表 138         /// </summary>
139         /// <typeparam name="TSource">數據源類型</typeparam>
140         /// <typeparam name="TMap">數據源映射類型</typeparam>
141         /// <param name="db"></param>
142         /// <param name="conditionals">Sugar調價表達式集合</param>
143         /// <returns></returns>
144         public static List<TMap> GetList<TSource, TMap>(this SqlSugarClient db, List<IConditionalModel> conditionals) where TSource : EntityBase, new() 145  { 146             var result = db.Queryable<TSource>().Where(conditionals).ToList(); 147             return result.Map<List<TSource>, List<TMap>>(); 148  } 149 
150         #endregion
151 
152         #region 是否包含某個元素
153         /// <summary>
154         /// 是否包含某個元素 155         /// </summary>
156         /// <typeparam name="TSource"></typeparam>
157         /// <param name="db"></param>
158         /// <param name="whereExp">條件表達式</param>
159         /// <returns></returns>
160         public static bool Exist<TSource>(this SqlSugarClient db, Expression<Func<TSource, bool>> whereExp) where TSource : EntityBase, new() 161  { 162             return db.Queryable<TSource>().Where(whereExp).Any(); 163  } 164         #endregion
165 
166         #region 新增實體對象
167         /// <summary>
168         /// 新增實體對象 169         /// </summary>
170         /// <typeparam name="TSource"></typeparam>
171         /// <param name="db"></param>
172         /// <param name="insertObj"></param>
173         /// <returns></returns>
174         public static bool Insert<TSource>(this SqlSugarClient db, TSource insertObj) where TSource : EntityBase, new() 175  { 176             return db.Insertable(insertObj).ExecuteCommand() > 0; 177  } 178 
179         /// <summary>
180         /// 新增實體對象 181         /// </summary>
182         /// <typeparam name="TSource"></typeparam>
183         /// <typeparam name="TMap"></typeparam>
184         /// <param name="db"></param>
185         /// <param name="insertDto"></param>
186         /// <returns></returns>
187         public static bool Insert<TSource, TMap>(this SqlSugarClient db, TSource insertDto) where TMap : EntityBase, new() 188  { 189             var entity = insertDto.Map<TSource, TMap>(); 190             return db.Insertable(entity).ExecuteCommand() > 0; 191  } 192         #endregion
193 
194         #region 批量新增實體對象
195         /// <summary>
196         /// 批量新增實體對象 197         /// </summary>
198         /// <typeparam name="TSource"></typeparam>
199         /// <param name="db"></param>
200         /// <param name="insertObjs"></param>
201         /// <returns></returns>
202         public static bool InsertRange<TSource>(this SqlSugarClient db, List<TSource> insertObjs) where TSource : EntityBase, new() 203  { 204             return db.Insertable(insertObjs).ExecuteCommand() > 0; 205  } 206 
207         /// <summary>
208         /// 批量新增實體對象 209         /// </summary>
210         /// <typeparam name="TSource"></typeparam>
211         /// <typeparam name="TMap"></typeparam>
212         /// <param name="db"></param>
213         /// <param name="insertObjs"></param>
214         /// <returns></returns>
215         public static bool InsertRange<TSource, TMap>(this SqlSugarClient db, List<TSource> insertObjs) where TMap : EntityBase, new() 216  { 217             var entitys = insertObjs.Map<List<TSource>, List<TMap>>(); 218             return db.Insertable(entitys).ExecuteCommand() > 0; 219  } 220         #endregion
221 
222         #region 更新單個實體對象
223         /// <summary>
224         /// 更新單個實體對象 225         /// </summary>
226         /// <typeparam name="TSource"></typeparam>
227         /// <param name="db"></param>
228         /// <param name="updateObj"></param>
229         /// <returns></returns>
230         public static bool Update<TSource>(this SqlSugarClient db, TSource updateObj) where TSource : EntityBase, new() 231  { 232             return db.Updateable(updateObj).ExecuteCommand() > 0; 233  } 234         #endregion
235 
236         #region 根據條件批量更新實體指定列
237         /// <summary>
238         /// 根據條件批量更新實體指定列 239         /// </summary>
240         /// <typeparam name="TSource"></typeparam>
241         /// <param name="db"></param>
242         /// <param name="columns">須要更新的列</param>
243         /// <param name="whereExp">條件表達式</param>
244         /// <returns></returns>
245         public static bool Update<TSource>(this SqlSugarClient db, Expression<Func<TSource, TSource>> columns, Expression<Func<TSource, bool>> whereExp) where TSource : EntityBase, new() 246  { 247             return db.Updateable<TSource>().UpdateColumns(columns).Where(whereExp).ExecuteCommand() > 0; 248  } 249         #endregion
250 
251         #region 物理刪除實體對象
252 
253         /// <summary>
254         /// 物理刪除實體對象 255         /// </summary>
256         /// <typeparam name="TSource"></typeparam>
257         /// <param name="db"></param>
258         /// <param name="deleteObj"></param>
259         /// <returns></returns>
260         public static bool Delete<TSource>(this SqlSugarClient db, TSource deleteObj) where TSource : EntityBase, new() 261  { 262             return db.Deleteable<TSource>().Where(deleteObj).ExecuteCommand() > 0; 263  } 264 
265         /// <summary>
266         /// 物理刪除實體對象 267         /// </summary>
268         /// <typeparam name="TSource"></typeparam>
269         /// <param name="db"></param>
270         /// <param name="whereExp">條件表達式</param>
271         /// <returns></returns>
272         public static bool Delete<TSource>(this SqlSugarClient db, Expression<Func<TSource, bool>> whereExp) where TSource : EntityBase, new() 273  { 274             return db.Deleteable<TSource>().Where(whereExp).ExecuteCommand() > 0; 275  } 276 
277         /// <summary>
278         /// 根據主鍵物理刪除實體對象 279         /// </summary>
280         /// <typeparam name="TSource"></typeparam>
281         /// <param name="db"></param>
282         /// <param name="id"></param>
283         /// <returns></returns>
284         public static bool DeleteById<TSource>(this SqlSugarClient db, dynamic id) where TSource : EntityBase, new() 285  { 286             return db.Deleteable<TSource>().In(id).ExecuteCommand() > 0; 287  } 288 
289         /// <summary>
290         /// 根據主鍵批量物理刪除實體集合 291         /// </summary>
292         /// <typeparam name="TSource"></typeparam>
293         /// <param name="db"></param>
294         /// <param name="ids"></param>
295         /// <returns></returns>
296         public static bool DeleteByIds<TSource>(this SqlSugarClient db, dynamic[] ids) where TSource : EntityBase, new() 297  { 298             return db.Deleteable<TSource>().In(ids).ExecuteCommand() > 0; 299  } 300 
301         #endregion
302 
303         #region 分頁查詢
304 
305         /// <summary>
306         /// 獲取分頁列表【頁碼,每頁條數】 307         /// </summary>
308         /// <typeparam name="TSource">數據源類型</typeparam>
309         /// <param name="db"></param>
310         /// <param name="pageIndex">頁碼(從0開始)</param>
311         /// <param name="pageSize">每頁條數</param>
312         /// <returns></returns>
313         public static IPagedList<TSource> GetPageList<TSource>(this SqlSugarClient db, int pageIndex, int pageSize) where TSource : EntityBase, new() 314  { 315             int count = 0; 316             var result = db.Queryable<TSource>().ToPageList(pageIndex, pageSize, ref count); 317             return new PagedList<TSource>(result, pageIndex, pageSize, count); 318  } 319 
320         /// <summary>
321         /// 獲取分頁列表【頁碼,每頁條數】 322         /// </summary>
323         /// <typeparam name="TSource">數據源類型</typeparam>
324         /// <typeparam name="TMap">數據源映射類型</typeparam>
325         /// <param name="db"></param>
326         /// <param name="pageIndex">頁碼(從0開始)</param>
327         /// <param name="pageSize">每頁條數</param>
328         /// <returns></returns>
329         public static IPagedList<TMap> GetPageList<TSource, TMap>(this SqlSugarClient db, int pageIndex, int pageSize) where TSource : EntityBase, new() 330  { 331             int count = 0; 332             var result = db.Queryable<TSource>().ToPageList(pageIndex, pageSize, ref count); 333             var pageResult = new PagedList<TSource>(result, pageIndex, pageSize, count); 334             return pageResult.Map<TSource, TMap>(); 335  } 336 
337         #endregion
338 
339         #region 分頁查詢(排序)
340 
341         /// <summary>
342         /// 獲取分頁列表【排序,頁碼,每頁條數】 343         /// </summary>
344         /// <typeparam name="TSource">數據源類型</typeparam>
345         /// <param name="db"></param>
346         /// <param name="orderExp">排序表達式</param>
347         /// <param name="orderType">排序類型</param>
348         /// <param name="pageIndex">頁碼(從0開始)</param>
349         /// <param name="pageSize">每頁條數</param>
350         /// <returns></returns>
351         public static IPagedList<TSource> GetPageList<TSource>(this SqlSugarClient db, Expression<Func<TSource, object>> orderExp, OrderByType orderType, int pageIndex, int pageSize) where TSource : EntityBase, new() 352  { 353             int count = 0; 354             var result = db.Queryable<TSource>().OrderBy(orderExp, orderType).ToPageList(pageIndex, pageSize, ref count); 355             return new PagedList<TSource>(result, pageIndex, pageSize, count); 356  } 357 
358         /// <summary>
359         /// 獲取分頁列表【排序,頁碼,每頁條數】 360         /// </summary>
361         /// <typeparam name="TSource">數據源類型</typeparam>
362         /// <typeparam name="TMap">數據源映射類型</typeparam>
363         /// <param name="db"></param>
364         /// <param name="orderExp">排序表達式</param>
365         /// <param name="orderType">排序類型</param>
366         /// <param name="pageIndex">頁碼(從0開始)</param>
367         /// <param name="pageSize">每頁條數</param>
368         /// <returns></returns>
369         public static IPagedList<TMap> GetPageList<TSource, TMap>(this SqlSugarClient db, Expression<Func<TSource, object>> orderExp, OrderByType orderType, int pageIndex, int pageSize) where TSource : EntityBase, new() 370  { 371             int count = 0; 372             var result = db.Queryable<TSource>().OrderBy(orderExp, orderType).ToPageList(pageIndex, pageSize, ref count); 373             var pageResult = new PagedList<TSource>(result, pageIndex, pageSize, count); 374             return pageResult.Map<TSource, TMap>(); 375  } 376 
377         #endregion
378 
379         #region 分頁查詢(Linq表達式條件)
380 
381         /// <summary>
382         /// 獲取分頁列表【Linq表達式條件,頁碼,每頁條數】 383         /// </summary>
384         /// <typeparam name="TSource">數據源類型</typeparam>
385         /// <param name="db"></param>
386         /// <param name="whereExp">Linq表達式條件</param>
387         /// <param name="pageIndex">頁碼(從0開始)</param>
388         /// <param name="pageSize">每頁條數</param>
389         /// <returns></returns>
390         public static IPagedList<TSource> GetPageList<TSource>(this SqlSugarClient db, Expression<Func<TSource, bool>> whereExp, int pageIndex, int pageSize) where TSource : EntityBase, new() 391  { 392             int count = 0; 393             var result = db.Queryable<TSource>().Where(whereExp).ToPageList(pageIndex, pageSize, ref count); 394             return new PagedList<TSource>(result, pageIndex, pageSize, count); 395  } 396 
397         /// <summary>
398         /// 獲取分頁列表【Linq表達式條件,頁碼,每頁條數】 399         /// </summary>
400         /// <typeparam name="TSource">數據源類型</typeparam>
401         /// <typeparam name="TMap">數據源映射類型</typeparam>
402         /// <param name="db"></param>
403         /// <param name="whereExp">Linq表達式條件</param>
404         /// <param name="pageIndex">頁碼(從0開始)</param>
405         /// <param name="pageSize">每頁條數</param>
406         /// <returns></returns>
407         public static IPagedList<TMap> GetPageList<TSource, TMap>(this SqlSugarClient db, Expression<Func<TSource, bool>> whereExp, int pageIndex, int pageSize) where TSource : EntityBase, new() 408  { 409             int count = 0; 410             var result = db.Queryable<TSource>().Where(whereExp).ToPageList(pageIndex, pageSize, ref count); 411             var pageResult = new PagedList<TSource>(result, pageIndex, pageSize, count); 412             return pageResult.Map<TSource, TMap>(); 413  } 414 
415         #endregion
416 
417         #region 分頁查詢(Linq表達式條件,排序)
418 
419         /// <summary>
420         /// 獲取分頁列表【Linq表達式條件,排序,頁碼,每頁條數】 421         /// </summary>
422         /// <typeparam name="TSource">數據源類型</typeparam>
423         /// <param name="db"></param>
424         /// <param name="whereExp">Linq表達式條件</param>
425         /// <param name="orderExp">排序表達式</param>
426         /// <param name="orderType">排序類型</param>
427         /// <param name="pageIndex">頁碼(從0開始)</param>
428         /// <param name="pageSize">每頁條數</param>
429         /// <returns></returns>
430         public static IPagedList<TSource> GetPageList<TSource>(this SqlSugarClient db, Expression<Func<TSource, bool>> whereExp, Expression<Func<TSource, object>> orderExp, OrderByType orderType, int pageIndex, int pageSize) where TSource : EntityBase, new() 431  { 432             int count = 0; 433             var result = db.Queryable<TSource>().Where(whereExp).OrderBy(orderExp, orderType).ToPageList(pageIndex, pageSize, ref count); 434             return new PagedList<TSource>(result, pageIndex, pageSize, count); 435  } 436 
437         /// <summary>
438         /// 獲取分頁列表【Linq表達式條件,排序,頁碼,每頁條數】 439         /// </summary>
440         /// <typeparam name="TSource">數據源類型</typeparam>
441         /// <typeparam name="TMap">數據源映射類型</typeparam>
442         /// <param name="db"></param>
443         /// <param name="whereExp">Linq表達式條件</param>
444         /// <param name="orderExp">排序表達式</param>
445         /// <param name="orderType">排序類型</param>
446         /// <param name="pageIndex">頁碼(從0開始)</param>
447         /// <param name="pageSize">每頁條數</param>
448         /// <returns></returns>
449         public static IPagedList<TMap> GetPageList<TSource, TMap>(this SqlSugarClient db, Expression<Func<TSource, bool>> whereExp, Expression<Func<TSource, object>> orderExp, OrderByType orderType, int pageIndex, int pageSize) where TSource : EntityBase, new() 450  { 451             int count = 0; 452             var result = db.Queryable<TSource>().Where(whereExp).OrderBy(orderExp, orderType).ToPageList(pageIndex, pageSize, ref count); 453             var pageResult = new PagedList<TSource>(result, pageIndex, pageSize, count); 454             return pageResult.Map<TSource, TMap>(); 455  } 456 
457         #endregion
458 
459         #region 分頁查詢(Sugar條件)
460 
461         /// <summary>
462         /// 獲取分頁列表【Sugar表達式條件,頁碼,每頁條數】 463         /// </summary>
464         /// <typeparam name="TSource">數據源類型</typeparam>
465         /// <param name="db"></param>
466         /// <param name="conditionals">Sugar條件表達式集合</param>
467         /// <param name="pageIndex">頁碼(從0開始)</param>
468         /// <param name="pageSize">每頁條數</param>
469         /// <returns></returns>
470         public static IPagedList<TSource> GetPageList<TSource>(this SqlSugarClient db, List<IConditionalModel> conditionals, int pageIndex, int pageSize) where TSource : EntityBase, new() 471  { 472             int count = 0; 473             var result = db.Queryable<TSource>().Where(conditionals).ToPageList(pageIndex, pageSize, ref count); 474             return new PagedList<TSource>(result, pageIndex, pageSize, count); 475  } 476 
477         /// <summary>
478         /// 獲取分頁列表【Sugar表達式條件,頁碼,每頁條數】 479         /// </summary>
480         /// <typeparam name="TSource">數據源類型</typeparam>
481         /// <typeparam name="TMap">數據源映射類型</typeparam>
482         /// <param name="db"></param>
483         /// <param name="conditionals">Sugar條件表達式集合</param>
484         /// <param name="pageIndex">頁碼(從0開始)</param>
485         /// <param name="pageSize">每頁條數</param>
486         /// <returns></returns>
487         public static IPagedList<TMap> GetPageList<TSource, TMap>(this SqlSugarClient db, List<IConditionalModel> conditionals, int pageIndex, int pageSize) where TSource : EntityBase, new() 488  { 489             int count = 0; 490             var result = db.Queryable<TSource>().Where(conditionals).ToPageList(pageIndex, pageSize, ref count); 491             var pageResult = new PagedList<TSource>(result, pageIndex, pageSize, count); 492             return pageResult.Map<TSource, TMap>(); 493  } 494 
495         #endregion
496 
497         #region 分頁查詢(Sugar條件,排序)
498 
499         /// <summary>
500         /// 獲取分頁列表【Sugar表達式條件,排序,頁碼,每頁條數】 501         /// </summary>
502         /// <typeparam name="TSource"></typeparam>
503         /// <param name="db"></param>
504         /// <param name="conditionals">Sugar條件表達式集合</param>
505         /// <param name="orderExp">排序表達式</param>
506         /// <param name="orderType">排序類型</param>
507         /// <param name="pageIndex">頁碼(從0開始)</param>
508         /// <param name="pageSize">每頁條數</param>
509         /// <returns></returns>
510         public static IPagedList<TSource> GetPageList<TSource>(this SqlSugarClient db, List<IConditionalModel> conditionals, Expression<Func<TSource, object>> orderExp, OrderByType orderType, int pageIndex, int pageSize) where TSource : EntityBase, new() 511  { 512             int count = 0; 513             var result = db.Queryable<TSource>().Where(conditionals).OrderBy(orderExp, orderType).ToPageList(pageIndex, pageSize, ref count); 514             return new PagedList<TSource>(result, pageIndex, pageSize, count); 515  } 516 
517         /// <summary>
518         /// 獲取分頁列表【Sugar表達式條件,排序,頁碼,每頁條數】 519         /// </summary>
520         /// <typeparam name="TSource"></typeparam>
521         /// <param name="db"></param>
522         /// <param name="conditionals">Sugar條件表達式集合</param>
523         /// <param name="orderExp">排序表達式</param>
524         /// <param name="orderType">排序類型</param>
525         /// <param name="pageIndex">頁碼(從0開始)</param>
526         /// <param name="pageSize">每頁條數</param>
527         /// <returns></returns>
528         public static IPagedList<TMap> GetPageList<TSource, TMap>(this SqlSugarClient db, List<IConditionalModel> conditionals, Expression<Func<TSource, object>> orderExp, OrderByType orderType, int pageIndex, int pageSize) where TSource : EntityBase, new() 529  { 530             int count = 0; 531             var result = db.Queryable<TSource>().Where(conditionals).OrderBy(orderExp, orderType).ToPageList(pageIndex, pageSize, ref count); 532             var pageResult = new PagedList<TSource>(result, pageIndex, pageSize, count); 533             return pageResult.Map<TSource, TMap>(); 534  } 535 
536         #endregion
537 
538         #region 分頁查詢 (擴展條件構造實體,默認排序列,默認排序方式)
539         /// <summary>
540         /// 分頁查詢 (擴展條件構造實體,默認排序列,默認排序方式) 541         /// </summary>
542         /// <typeparam name="TSource"></typeparam>
543         /// <typeparam name="TMap"></typeparam>
544         /// <param name="db"></param>
545         /// <param name="query"></param>
546         /// <param name="defaultSort"></param>
547         /// <param name="defaultSortType"></param>
548         /// <returns></returns>
549         public static IPagedList<TMap> GetPageList<TSource, TMap>(this SqlSugarClient db, QueryCollection query, Expression<Func<TSource, object>> defaultSort, OrderByType defaultSortType) where TSource : EntityBase, new() 550  { 551             int count = 0; 552             List<IConditionalModel> conditionals = query.ConditionItems.ExamineConditional<TSource>(); 553             Expression<Func<TSource, object>> sort = query.SortLambda<TSource, object>(defaultSort, defaultSortType, out var sortType); 554             var result = db.Queryable<TSource>().Where(conditionals).OrderBy(sort, sortType).ToPageList(query.PageIndex, query.PageSize, ref count); 555             var pageResult = new PagedList<TSource>(result, query.PageIndex, query.PageSize, count); 556             return pageResult.Map<TSource, TMap>(); 557  } 558         #endregion
559 
560         #region 分頁查詢 (擴展條件構造實體,默認排序列,默認排序方式,Linq表達式條件)
561         /// <summary>
562         /// 分頁查詢 (擴展條件構造實體,默認排序列,默認排序方式,Linq表達式條件) 563         /// </summary>
564         /// <typeparam name="TSource"></typeparam>
565         /// <typeparam name="TMap"></typeparam>
566         /// <param name="db"></param>
567         /// <param name="query"></param>
568         /// <param name="defaultSort"></param>
569         /// <param name="defaultSortType"></param>
570         /// <param name="whereExp"></param>
571         /// <returns></returns>
572         public static IPagedList<TMap> GetPageList<TSource, TMap>(this SqlSugarClient db, QueryCollection query, Expression<Func<TSource, object>> defaultSort, OrderByType defaultSortType, Expression<Func<TSource, bool>> whereExp) where TSource : EntityBase, new() 573  { 574             int count = 0; 575             List<IConditionalModel> conditionals = query.ConditionItems.ExamineConditional<TSource>(); 576             Expression<Func<TSource, object>> sort = query.SortLambda<TSource, object>(defaultSort, defaultSortType, out var sortType); 577             var result = db.Queryable<TSource>().Where(whereExp).Where(conditionals).OrderBy(sort, sortType).ToPageList(query.PageIndex, query.PageSize, ref count); 578             var pageResult = new PagedList<TSource>(result, query.PageIndex, query.PageSize, count); 579             return pageResult.Map<TSource, TMap>(); 580  } 581         #endregion
582     }
SugarFactoryExtensions,自行斟酌,喜歡使用sugar原生的,可跳過

使用:sql

1             services.AddSqlSugarClient<DbFactory>((sp, op) =>
2  { 3                 op.ConnectionString = sp.GetService<IConfiguration>().GetConnectionString("lucy"); 4                 op.DbType = DbType.MySql; 5                 op.IsAutoCloseConnection = true; 6                 op.InitKeyType = InitKeyType.Attribute; 7                 op.IsShardSameThread = true; 8             });
注入
 1     //若是數據操做簡單,直接在業務層使用
 2     public class UsersService : Repository<DbFactory, IUsersRepository>, IUsersService  3  {  4         public UsersService(DbFactory factory, IUsersRepository) : base(factory)  5  {  6 
 7  }  8 
 9 
10         public async Task TestMethod() 11  { 12             //獲取數據庫上下文 13             //第一種 
14             DbContext.Insert<Users>(new Users()); 15             //第二種
16             using (var db = Factory.GetDbContext()) 17  { 18                 db.Insert<Users>(new Users()); 19                 db.Update<Users>(new Users()); 20  } 21             //數據操做繁瑣的放到自定義的IUsersRepository中
22             await DbRepository.TestAddAsync(); 23  } 24 
25     }
業務層使用示例
 1  public class UsersRepository : Repository<DbFactory>, IUsersRepository  2  {  3         public UsersRepository(DbFactory factory) : base(factory)  4  {  5 
 6  }  7 
 8         public async Task<bool> TestAddAsync()  9  { 10             //這裏獲取數據庫上下文,與業務層一致
11 
12             DbContext.Insert<Users>(new Users()); 13 
14             using (var db = Factory.GetDbContext()) 15  { 16                 db.Insert<Users>(new Users()); 17                 db.Update<Users>(new Users()); 18  } 19             return await Task.FromResult(true); 20  } 21     }
倉儲層(可省略,數據操做繁瑣能夠放這一層,簡單的能夠直接在業務層使用)
相關文章
相關標籤/搜索