diff options
Diffstat (limited to 'Software/Visual_Studio_v2/Tango.DAL.Mongo/MongoRepository.cs')
| -rw-r--r-- | Software/Visual_Studio_v2/Tango.DAL.Mongo/MongoRepository.cs | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/Software/Visual_Studio_v2/Tango.DAL.Mongo/MongoRepository.cs b/Software/Visual_Studio_v2/Tango.DAL.Mongo/MongoRepository.cs new file mode 100644 index 000000000..d268f434d --- /dev/null +++ b/Software/Visual_Studio_v2/Tango.DAL.Mongo/MongoRepository.cs @@ -0,0 +1,76 @@ +using MongoDB.Driver; +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using System.Reflection; +using Tango.DAL.Attributes; +using System.Linq.Expressions; +using MongoDB.Driver.Linq; + +namespace Tango.DAL.Mongo +{ + public class MongoRepository<T> : IRepository<T> where T : Entity + { + private IMongoDatabase _database; + private MongoClient _client; + private IMongoCollection<T> _collection; + + public MongoRepository(MongoDataBaseSettings settings) + { + _client = new MongoClient(settings.Address); + _database = _client.GetDatabase(settings.DatabaseName); + } + + private IMongoCollection<T> GetCollection() + { + if (_collection == null) + { + _collection = _database.GetCollection<T>(typeof(T).GetCustomAttribute<MongoCollectionAttribute>().Name); + } + + return _collection; + } + + public async Task<List<T>> GetAllAsync() + { + return await (await GetCollection().FindAsync(x => true)).ToListAsync(); + } + + public async Task<List<T>> GetAsync(Expression<Func<T, bool>> filter) + { + return await (await GetCollection().FindAsync(filter)).ToListAsync(); + } + + public async Task<T> ReplaceAsync(T entity) + { + await GetCollection().ReplaceOneAsync(x => x.ID == entity.ID, entity); + return entity; + } + + public async Task<long> DeleteAsync(Expression<Func<T, bool>> filter) + { + return (await GetCollection().DeleteOneAsync(filter)).DeletedCount; + } + + public async Task<T> Insert(T entity) + { + await GetCollection().InsertOneAsync(entity); + return entity; + } + + public Task<long> Count() + { + return GetCollection().CountDocumentsAsync(x => true); + } + + public Task<long> Count(Expression<Func<T, bool>> filter) + { + return GetCollection().CountDocumentsAsync(filter); + } + + public void Dispose() + { + + } + } +} |
