From b04231055f8fa18e72e955cb0b0b9b781b9809ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Tue, 3 Jan 2017 22:33:30 +0300 Subject: [PATCH] Improved IDatabaseApi and IUnitOfWork, extracted ISupportsSavingChanges. --- .../DbContextDatabaseApi.cs | 7 +++++- .../Abp/Uow/MongoDB/MongoDbDatabaseApi.cs | 10 +------- src/Volo.Abp/Volo/Abp/Uow/ChildUnitOfWork.cs | 12 +++++++++ src/Volo.Abp/Volo/Abp/Uow/IDatabaseApi.cs | 7 ++---- .../Volo/Abp/Uow/ISupportsSavingChanges.cs | 12 +++++++++ src/Volo.Abp/Volo/Abp/Uow/IUnitOfWork.cs | 4 +++ src/Volo.Abp/Volo/Abp/Uow/UnitOfWork.cs | 25 +++++++++++++------ .../Volo/Abp/Uow/UnitOfWorkExtensions.cs | 18 ------------- 8 files changed, 54 insertions(+), 41 deletions(-) create mode 100644 src/Volo.Abp/Volo/Abp/Uow/ISupportsSavingChanges.cs delete mode 100644 src/Volo.Abp/Volo/Abp/Uow/UnitOfWorkExtensions.cs diff --git a/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Uow/EntityFrameworkCore/DbContextDatabaseApi.cs b/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Uow/EntityFrameworkCore/DbContextDatabaseApi.cs index f68df65aa9..41fb5b8610 100644 --- a/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Uow/EntityFrameworkCore/DbContextDatabaseApi.cs +++ b/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Uow/EntityFrameworkCore/DbContextDatabaseApi.cs @@ -4,7 +4,7 @@ using Volo.Abp.EntityFrameworkCore; namespace Volo.Abp.Uow.EntityFrameworkCore { - public class DbContextDatabaseApi : IDatabaseApi + public class DbContextDatabaseApi : IDatabaseApi, ISupportsSavingChanges where TDbContext : AbpDbContext { public TDbContext DbContext { get; } @@ -18,5 +18,10 @@ namespace Volo.Abp.Uow.EntityFrameworkCore { return DbContext.SaveChangesAsync(cancellationToken); } + + public void SaveChanges() + { + DbContext.SaveChanges(); + } } } \ 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 993b0aceb0..1d19b490d5 100644 --- a/src/Volo.Abp.MongoDB/Volo/Abp/Uow/MongoDB/MongoDbDatabaseApi.cs +++ b/src/Volo.Abp.MongoDB/Volo/Abp/Uow/MongoDB/MongoDbDatabaseApi.cs @@ -1,6 +1,4 @@ -using System.Threading; -using System.Threading.Tasks; -using MongoDB.Driver; +using MongoDB.Driver; namespace Volo.Abp.Uow.MongoDB { @@ -12,11 +10,5 @@ namespace Volo.Abp.Uow.MongoDB { Database = database; } - - public Task SaveChangesAsync(CancellationToken cancellationToken = new CancellationToken()) - { - //TODO: MongoDB has no such a feature, verify it! - return Task.CompletedTask; - } } } diff --git a/src/Volo.Abp/Volo/Abp/Uow/ChildUnitOfWork.cs b/src/Volo.Abp/Volo/Abp/Uow/ChildUnitOfWork.cs index 287bf39d42..78c4b04217 100644 --- a/src/Volo.Abp/Volo/Abp/Uow/ChildUnitOfWork.cs +++ b/src/Volo.Abp/Volo/Abp/Uow/ChildUnitOfWork.cs @@ -18,10 +18,20 @@ namespace Volo.Abp.Uow _parent = parent; } + public void SaveChanges() + { + _parent.SaveChanges(); + } + public Task SaveChangesAsync(CancellationToken cancellationToken = default(CancellationToken)) { return _parent.SaveChangesAsync(cancellationToken); } + + public void Complete() + { + _parent.Complete(); + } public Task CompleteAsync(CancellationToken cancellationToken = default(CancellationToken)) { @@ -43,6 +53,8 @@ namespace Volo.Abp.Uow return _parent.AddDatabaseApi(id, databaseApi); } + + public void Dispose() { diff --git a/src/Volo.Abp/Volo/Abp/Uow/IDatabaseApi.cs b/src/Volo.Abp/Volo/Abp/Uow/IDatabaseApi.cs index a30e9eb8e8..4aba6e4674 100644 --- a/src/Volo.Abp/Volo/Abp/Uow/IDatabaseApi.cs +++ b/src/Volo.Abp/Volo/Abp/Uow/IDatabaseApi.cs @@ -1,10 +1,7 @@ -using System.Threading; -using System.Threading.Tasks; - -namespace Volo.Abp.Uow +namespace Volo.Abp.Uow { public interface IDatabaseApi { - Task SaveChangesAsync(CancellationToken cancellationToken = default(CancellationToken)); + } } \ No newline at end of file diff --git a/src/Volo.Abp/Volo/Abp/Uow/ISupportsSavingChanges.cs b/src/Volo.Abp/Volo/Abp/Uow/ISupportsSavingChanges.cs new file mode 100644 index 0000000000..ee775c1560 --- /dev/null +++ b/src/Volo.Abp/Volo/Abp/Uow/ISupportsSavingChanges.cs @@ -0,0 +1,12 @@ +using System.Threading; +using System.Threading.Tasks; + +namespace Volo.Abp.Uow +{ + public interface ISupportsSavingChanges + { + void SaveChanges(); + + Task SaveChangesAsync(CancellationToken cancellationToken = default(CancellationToken)); + } +} \ No newline at end of file diff --git a/src/Volo.Abp/Volo/Abp/Uow/IUnitOfWork.cs b/src/Volo.Abp/Volo/Abp/Uow/IUnitOfWork.cs index 5cd1871ba7..8ecb5e0a50 100644 --- a/src/Volo.Abp/Volo/Abp/Uow/IUnitOfWork.cs +++ b/src/Volo.Abp/Volo/Abp/Uow/IUnitOfWork.cs @@ -16,8 +16,12 @@ namespace Volo.Abp.Uow IDatabaseApi AddDatabaseApi(string id, IDatabaseApi databaseApi); + void SaveChanges(); + Task SaveChangesAsync(CancellationToken cancellationToken = default(CancellationToken)); + void Complete(); + Task CompleteAsync(CancellationToken cancellationToken = default(CancellationToken)); } } diff --git a/src/Volo.Abp/Volo/Abp/Uow/UnitOfWork.cs b/src/Volo.Abp/Volo/Abp/Uow/UnitOfWork.cs index 259f1764ab..decd576385 100644 --- a/src/Volo.Abp/Volo/Abp/Uow/UnitOfWork.cs +++ b/src/Volo.Abp/Volo/Abp/Uow/UnitOfWork.cs @@ -31,29 +31,38 @@ namespace Volo.Abp.Uow } _isDisposed = true; - - //TODO: Remove itself from IUnitOfWorkManager _ambientUnitOfWork.SetUnitOfWork(null); } - public async Task SaveChangesAsync(CancellationToken cancellationToken = default(CancellationToken)) + public void SaveChanges() { foreach (var databaseApi in _databaseApis.Values) { - await databaseApi.SaveChangesAsync(cancellationToken); + (databaseApi as ISupportsSavingChanges)?.SaveChanges(); } } - public async Task CompleteAsync(CancellationToken cancellationToken = default(CancellationToken)) + public async Task SaveChangesAsync(CancellationToken cancellationToken = default(CancellationToken)) { - //TODO: We need a transaction management system. - foreach (var databaseApi in _databaseApis.Values) { - await databaseApi.SaveChangesAsync(cancellationToken); + if (databaseApi is ISupportsSavingChanges) + { + await (databaseApi as ISupportsSavingChanges).SaveChangesAsync(cancellationToken); + } } } + public void Complete() + { + SaveChanges(); + } + + public async Task CompleteAsync(CancellationToken cancellationToken = default(CancellationToken)) + { + await SaveChangesAsync(cancellationToken); + } + public IDatabaseApi FindDatabaseApi(string id) { return _databaseApis.GetOrDefault(id); diff --git a/src/Volo.Abp/Volo/Abp/Uow/UnitOfWorkExtensions.cs b/src/Volo.Abp/Volo/Abp/Uow/UnitOfWorkExtensions.cs deleted file mode 100644 index 5f0ceef6f1..0000000000 --- a/src/Volo.Abp/Volo/Abp/Uow/UnitOfWorkExtensions.cs +++ /dev/null @@ -1,18 +0,0 @@ -using System.Threading; -using JetBrains.Annotations; -using Volo.Abp.Threading; - -namespace Volo.Abp.Uow -{ - public static class UnitOfWorkExtensions - { - //TODO: Implement all sync versions - - public static void Complete([NotNull] this IUnitOfWork unitOfWork, CancellationToken cancellationToken = default(CancellationToken)) - { - Check.NotNull(unitOfWork, nameof(unitOfWork)); - - AsyncHelper.RunSync(() => unitOfWork.CompleteAsync(cancellationToken)); - } - } -} \ No newline at end of file