Improved IDatabaseApi and IUnitOfWork, extracted ISupportsSavingChanges.

pull/81/head
Halil İbrahim Kalkan 9 years ago
parent 9404310e60
commit b04231055f

@ -4,7 +4,7 @@ using Volo.Abp.EntityFrameworkCore;
namespace Volo.Abp.Uow.EntityFrameworkCore
{
public class DbContextDatabaseApi<TDbContext> : IDatabaseApi
public class DbContextDatabaseApi<TDbContext> : IDatabaseApi, ISupportsSavingChanges
where TDbContext : AbpDbContext<TDbContext>
{
public TDbContext DbContext { get; }
@ -18,5 +18,10 @@ namespace Volo.Abp.Uow.EntityFrameworkCore
{
return DbContext.SaveChangesAsync(cancellationToken);
}
public void SaveChanges()
{
DbContext.SaveChanges();
}
}
}

@ -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;
}
}
}

@ -18,11 +18,21 @@ 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))
{
return Task.CompletedTask;
@ -43,6 +53,8 @@ namespace Volo.Abp.Uow
return _parent.AddDatabaseApi(id, databaseApi);
}
public void Dispose()
{

@ -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));
}
}

@ -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));
}
}

@ -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));
}
}

@ -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);

@ -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));
}
}
}
Loading…
Cancel
Save