BaseRepository.cs 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. using Abp.Collections.Extensions;
  2. using SnapshotWinFormsApp.Application.Dtos;
  3. using SnapshotWinFormsApp.Entities.NewHotline;
  4. using SnapshotWinFormsApp.Repository.Interfaces;
  5. using SqlSugar;
  6. using System;
  7. using System.Collections.Concurrent;
  8. using System.Collections.Generic;
  9. using System.Data;
  10. using System.Linq;
  11. using System.Text;
  12. using System.Threading.Tasks;
  13. namespace SnapshotWinFormsApp.Repository;
  14. public class ConcurrentQueueRepository<TEntity> where TEntity : Entity, new()
  15. {
  16. private ConcurrentQueue<TEntity> _queue = new ConcurrentQueue<TEntity>();
  17. public void Insert(TEntity entity, ISqlSugarClient sugarClient, bool isEnd)
  18. {
  19. _queue.Enqueue(entity);
  20. if (_queue.Count != 1000 && isEnd == false) return;
  21. sugarClient.Fastest<TEntity>().BulkCopy(_queue.ToList());
  22. _queue.Clear();
  23. }
  24. }
  25. public class BaseRepository<T> : IBaseRepository<T> where T : Entity, new()
  26. {
  27. private readonly SqlSugarClient _db;
  28. public readonly ConcurrentQueueRepository<T> _queue;
  29. public SqlSugarClient db => this._db;
  30. public BaseRepository(CreateInstanceInDto inDto)
  31. {
  32. var context = inDto.DbSqlServer;
  33. _db = context.DbItems.GetValueOrDefault(inDto.Key + "PGSQLDB");
  34. _queue = new ConcurrentQueueRepository<T>();
  35. }
  36. public async Task<List<T>> GetAllAsync(CancellationToken token)
  37. {
  38. return _db.Queryable<T>().ToList();
  39. }
  40. public T GetById(int id)
  41. {
  42. return _db.Queryable<T>().InSingle(id);
  43. }
  44. public async Task<string> InsertAsync(T entity, CancellationToken token)
  45. {
  46. if (entity.Id.IsNullOrEmpty())
  47. entity.InitId();
  48. await _db.Insertable(entity).ExecuteCommandAsync(token);
  49. return entity.Id;
  50. }
  51. public ISugarQueryable<T> Queryable()
  52. {
  53. return _db.Queryable<T>();
  54. }
  55. public void Update(T entity)
  56. {
  57. _db.Updateable<T>(entity).ExecuteCommand();
  58. }
  59. public IUpdateable<T> Updateable()
  60. => _db.Updateable<T>();
  61. public async Task<int> ExecuteSqlAsync(string sql)
  62. {
  63. return await _db.Ado.ExecuteCommandAsync(sql, new List<SugarParameter>());
  64. }
  65. public DataTable GetDataTable(string sql)
  66. => _db.Ado.GetDataTable(sql);
  67. public string InsertBulk(T entity, bool isEnd)
  68. {
  69. if (entity.Id.IsNullOrEmpty())
  70. entity.InitId();
  71. _queue.Insert(entity,_db, isEnd);
  72. return entity.Id;
  73. }
  74. }