From 86a352c605e45db8d96a79dc67bf607e03c19dc7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Mon, 26 Dec 2016 23:09:31 +0300 Subject: [PATCH] Created initial MongoDbRepository #52. --- .../MongoDB/IMongoDbRepository.cs | 21 ++++++ .../Repositories/MongoDB/MongoDbRepository.cs | 65 +++++++++++++++++++ .../Abp/Uow/MongoDB/MongoDbDatabaseApi.cs | 2 +- 3 files changed, 87 insertions(+), 1 deletion(-) create mode 100644 src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/IMongoDbRepository.cs create mode 100644 src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs diff --git a/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/IMongoDbRepository.cs b/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/IMongoDbRepository.cs new file mode 100644 index 0000000000..4d0d058bcb --- /dev/null +++ b/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/IMongoDbRepository.cs @@ -0,0 +1,21 @@ +using MongoDB.Driver; +using Volo.Abp.Domain.Entities; + +namespace Volo.Abp.Domain.Repositories.MongoDB +{ + public interface IMongoDbRepository : IMongoDbRepository, IQueryableRepository + where TEntity : class, IEntity + { + + } + + public interface IMongoDbRepository : IQueryableRepository + where TEntity : class, IEntity + { + } + + public interface IMongoDatabaseProvider + { + IMongoDatabase GetDatabase(); + } +} diff --git a/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs b/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs new file mode 100644 index 0000000000..5823085670 --- /dev/null +++ b/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs @@ -0,0 +1,65 @@ +using System.Linq; +using MongoDB.Driver; +using Volo.Abp.Domain.Entities; + +namespace Volo.Abp.Domain.Repositories.MongoDB +{ + public class MongoDbRepository : MongoDbRepository, IMongoDbRepository + where TEntity : class, IEntity + { + public MongoDbRepository(IMongoDatabaseProvider databaseProvider) + : base(databaseProvider) + { + } + } + + //TODO: MongoDb.Driver fully supports async, implement all of them! + + public class MongoDbRepository : QueryableRepositoryBase, IMongoDbRepository + where TEntity : class, IEntity + { + //TODO: Define a MongoDbContext to relate to a connection string for modularity! + + public virtual IMongoCollection Collection => Database.GetCollection(""); + + public virtual IMongoDatabase Database => _databaseProvider.GetDatabase(); + + private readonly IMongoDatabaseProvider _databaseProvider; + + public MongoDbRepository(IMongoDatabaseProvider databaseProvider) + { + _databaseProvider = databaseProvider; + } + + public override TEntity Insert(TEntity entity, bool autoSave = false) + { + //TODO: What about assigning PK? Does mongodb handle it? Test! + //TODO: Mongo has InsertMany & UpdateMany methods. Does them transactional? If so, we may consider to add them to IRepository! + + Collection.InsertOne(entity); + return entity; + } + + public override TEntity Update(TEntity entity) + { + //TODO: How to update? TEST! + + var filter = Builders.Filter.Eq(e => e.Id, entity.Id); + Collection.UpdateOne(filter, new ObjectUpdateDefinition(entity)); + return entity; + } + + public override void Delete(TEntity entity) + { + //TODO: How to delete? TEST! + + var filter = Builders.Filter.Eq(e => e.Id, entity.Id); + Collection.DeleteOne(filter); + } + + protected override IQueryable GetQueryable() + { + return Collection.AsQueryable(); + } + } +} \ No newline at end of file diff --git a/src/Volo.Abp.MongoDB/Volo/Abp/Uow/MongoDB/MongoDbDatabaseApi.cs b/src/Volo.Abp.MongoDB/Volo/Abp/Uow/MongoDB/MongoDbDatabaseApi.cs index acc867d515..993b0aceb0 100644 --- a/src/Volo.Abp.MongoDB/Volo/Abp/Uow/MongoDB/MongoDbDatabaseApi.cs +++ b/src/Volo.Abp.MongoDB/Volo/Abp/Uow/MongoDB/MongoDbDatabaseApi.cs @@ -15,7 +15,7 @@ namespace Volo.Abp.Uow.MongoDB public Task SaveChangesAsync(CancellationToken cancellationToken = new CancellationToken()) { - //TODO: Does MongoDB has such a feature? + //TODO: MongoDB has no such a feature, verify it! return Task.CompletedTask; } }