Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

MongoRepository.cs 3.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. using Diligent.Data;
  2. using MongoDB.Driver;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using System.Threading.Tasks;
  7. namespace Diligent.Persistence.Mongo
  8. {
  9. public abstract class Repository<TEntity> : IRepository<TEntity>
  10. where TEntity : class, IEntity<object>
  11. {
  12. public virtual string CollectionName => GetType().Name.Replace(nameof(Repository<TEntity>), "");
  13. private readonly IMongoContext _context;
  14. private readonly IMongoCollection<TEntity> _collection;
  15. protected Repository(IMongoContext context)
  16. {
  17. _context = context;
  18. _collection = context.MongoDatabase.GetCollection<TEntity>(CollectionName);
  19. }
  20. public virtual TEntity Get(object id)
  21. {
  22. var filter = Builders<TEntity>.Filter.Eq(e => e.Id, id);
  23. return _collection.Find(filter).FirstOrDefault();
  24. }
  25. public virtual IEnumerable<TEntity> GetAll()
  26. {
  27. return _collection.Find(_ => true).ToList();
  28. }
  29. public virtual void Add(TEntity entity)
  30. {
  31. _collection.InsertOne(entity);
  32. }
  33. public virtual void Add(IEnumerable<TEntity> entities)
  34. {
  35. _collection.InsertMany(entities);
  36. }
  37. public virtual void Update(TEntity entity)
  38. {
  39. var filter = Builders<TEntity>.Filter.Eq(en => en.Id, entity.Id);
  40. _collection.ReplaceOne(filter, entity);
  41. }
  42. public virtual void Update(IEnumerable<TEntity> entities)
  43. {
  44. foreach (var entity in entities)
  45. Update(entity);
  46. }
  47. public virtual void Remove(TEntity entity)
  48. {
  49. var filter = Builders<TEntity>.Filter.Eq(en => en.Id, entity.Id);
  50. _collection.DeleteOne(filter);
  51. }
  52. public virtual void Remove(IEnumerable<TEntity> entities)
  53. {
  54. var filter = Builders<TEntity>.Filter.Where(en => entities.Contains(en));
  55. _collection.DeleteMany(filter);
  56. }
  57. public virtual void SaveChanges()
  58. {
  59. _context.SaveChanges();
  60. }
  61. public virtual async Task<TEntity> GetAsync(object id)
  62. {
  63. var filter = Builders<TEntity>.Filter.Eq(e => e.Id, id);
  64. return await _collection.FindAsync(filter).Result.FirstOrDefaultAsync();
  65. }
  66. public virtual async Task<IEnumerable<TEntity>> GetAllAsync()
  67. {
  68. return await _collection.FindAsync(_ => true).Result.ToListAsync();
  69. }
  70. public virtual async Task AddAsync(TEntity entity)
  71. {
  72. await _collection.InsertOneAsync(entity);
  73. }
  74. public virtual async Task AddAsync(IEnumerable<TEntity> entities)
  75. {
  76. await _collection.InsertManyAsync(entities);
  77. }
  78. public virtual async Task UpdateAsync(TEntity entity)
  79. {
  80. var filter = Builders<TEntity>.Filter.Eq(en => en.Id, entity.Id);
  81. await _collection.ReplaceOneAsync(filter, entity);
  82. }
  83. public virtual async Task UpdateAsync(IEnumerable<TEntity> entities)
  84. {
  85. foreach (var entity in entities)
  86. await UpdateAsync(entity);
  87. }
  88. public virtual async Task RemoveAsync(TEntity entity)
  89. {
  90. var filter = Builders<TEntity>.Filter.Eq(en => en.Id, entity.Id);
  91. await _collection.DeleteOneAsync(filter);
  92. }
  93. public virtual async Task RemoveAsync(IEnumerable<TEntity> entities)
  94. {
  95. var filter = Builders<TEntity>.Filter.Where(en => entities.Contains(en));
  96. await _collection.DeleteManyAsync(filter);
  97. }
  98. public virtual async Task SaveChangesAsync()
  99. {
  100. await _context.SaveChangesAsync();
  101. }
  102. }
  103. }