Browse Source

Improved IDatabaseApi and IUnitOfWork, extracted ISupportsSavingChanges.

pull/81/head
Halil İbrahim Kalkan 10 years ago
parent
commit
b04231055f
  1. 7
      src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Uow/EntityFrameworkCore/DbContextDatabaseApi.cs
  2. 10
      src/Volo.Abp.MongoDB/Volo/Abp/Uow/MongoDB/MongoDbDatabaseApi.cs
  3. 12
      src/Volo.Abp/Volo/Abp/Uow/ChildUnitOfWork.cs
  4. 7
      src/Volo.Abp/Volo/Abp/Uow/IDatabaseApi.cs
  5. 12
      src/Volo.Abp/Volo/Abp/Uow/ISupportsSavingChanges.cs
  6. 4
      src/Volo.Abp/Volo/Abp/Uow/IUnitOfWork.cs
  7. 25
      src/Volo.Abp/Volo/Abp/Uow/UnitOfWork.cs
  8. 18
      src/Volo.Abp/Volo/Abp/Uow/UnitOfWorkExtensions.cs

7
src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Uow/EntityFrameworkCore/DbContextDatabaseApi.cs

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

10
src/Volo.Abp.MongoDB/Volo/Abp/Uow/MongoDB/MongoDbDatabaseApi.cs

@ -1,6 +1,4 @@
using System.Threading; using MongoDB.Driver;
using System.Threading.Tasks;
using MongoDB.Driver;
namespace Volo.Abp.Uow.MongoDB namespace Volo.Abp.Uow.MongoDB
{ {
@ -12,11 +10,5 @@ namespace Volo.Abp.Uow.MongoDB
{ {
Database = database; Database = database;
} }
public Task SaveChangesAsync(CancellationToken cancellationToken = new CancellationToken())
{
//TODO: MongoDB has no such a feature, verify it!
return Task.CompletedTask;
}
} }
} }

12
src/Volo.Abp/Volo/Abp/Uow/ChildUnitOfWork.cs

@ -18,11 +18,21 @@ namespace Volo.Abp.Uow
_parent = parent; _parent = parent;
} }
public void SaveChanges()
{
_parent.SaveChanges();
}
public Task SaveChangesAsync(CancellationToken cancellationToken = default(CancellationToken)) public Task SaveChangesAsync(CancellationToken cancellationToken = default(CancellationToken))
{ {
return _parent.SaveChangesAsync(cancellationToken); return _parent.SaveChangesAsync(cancellationToken);
} }
public void Complete()
{
_parent.Complete();
}
public Task CompleteAsync(CancellationToken cancellationToken = default(CancellationToken)) public Task CompleteAsync(CancellationToken cancellationToken = default(CancellationToken))
{ {
return Task.CompletedTask; return Task.CompletedTask;
@ -43,6 +53,8 @@ namespace Volo.Abp.Uow
return _parent.AddDatabaseApi(id, databaseApi); return _parent.AddDatabaseApi(id, databaseApi);
} }
public void Dispose() public void Dispose()
{ {

7
src/Volo.Abp/Volo/Abp/Uow/IDatabaseApi.cs

@ -1,10 +1,7 @@
using System.Threading; namespace Volo.Abp.Uow
using System.Threading.Tasks;
namespace Volo.Abp.Uow
{ {
public interface IDatabaseApi public interface IDatabaseApi
{ {
Task SaveChangesAsync(CancellationToken cancellationToken = default(CancellationToken));
} }
} }

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

4
src/Volo.Abp/Volo/Abp/Uow/IUnitOfWork.cs

@ -16,8 +16,12 @@ namespace Volo.Abp.Uow
IDatabaseApi AddDatabaseApi(string id, IDatabaseApi databaseApi); IDatabaseApi AddDatabaseApi(string id, IDatabaseApi databaseApi);
void SaveChanges();
Task SaveChangesAsync(CancellationToken cancellationToken = default(CancellationToken)); Task SaveChangesAsync(CancellationToken cancellationToken = default(CancellationToken));
void Complete();
Task CompleteAsync(CancellationToken cancellationToken = default(CancellationToken)); Task CompleteAsync(CancellationToken cancellationToken = default(CancellationToken));
} }
} }

25
src/Volo.Abp/Volo/Abp/Uow/UnitOfWork.cs

@ -31,29 +31,38 @@ namespace Volo.Abp.Uow
} }
_isDisposed = true; _isDisposed = true;
//TODO: Remove itself from IUnitOfWorkManager
_ambientUnitOfWork.SetUnitOfWork(null); _ambientUnitOfWork.SetUnitOfWork(null);
} }
public async Task SaveChangesAsync(CancellationToken cancellationToken = default(CancellationToken)) public void SaveChanges()
{ {
foreach (var databaseApi in _databaseApis.Values) 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) 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) public IDatabaseApi FindDatabaseApi(string id)
{ {
return _databaseApis.GetOrDefault(id); return _databaseApis.GetOrDefault(id);

18
src/Volo.Abp/Volo/Abp/Uow/UnitOfWorkExtensions.cs

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