#23 implemented nested unit of works.

pull/112/head
Halil İbrahim Kalkan 8 years ago
parent 790ed478da
commit 13d83674ee

@ -4,7 +4,7 @@ using Volo.Abp.Uow;
namespace Volo.Abp.AspNetCore.Mvc.Uow
{
class AbpUnitOfWorkMiddleware
public class AbpUnitOfWorkMiddleware
{
private readonly RequestDelegate _next;

@ -8,6 +8,21 @@ namespace Volo.Abp.Uow
IUnitOfWork Current { get; }
[NotNull]
IBasicUnitOfWork Begin();
IBasicUnitOfWork Begin([NotNull] UnitOfWorkStartOptions options);
}
public static class UnitOfWorkManagerExtensions
{
[NotNull]
public static IBasicUnitOfWork Begin(this IUnitOfWorkManager unitOfWorkManager)
{
return unitOfWorkManager.Begin(new UnitOfWorkStartOptions());
}
[NotNull]
public static IBasicUnitOfWork BeginNew(this IUnitOfWorkManager unitOfWorkManager)
{
return unitOfWorkManager.Begin(new UnitOfWorkStartOptions {RequiresNew = true});
}
}
}

@ -17,9 +17,11 @@ namespace Volo.Abp.Uow
_ambientUnitOfWork = ambientUnitOfWork;
}
public IBasicUnitOfWork Begin()
public IBasicUnitOfWork Begin(UnitOfWorkStartOptions options)
{
if (_ambientUnitOfWork.UnitOfWork != null)
Check.NotNull(options, nameof(options));
if (!options.RequiresNew && _ambientUnitOfWork.UnitOfWork != null)
{
return new ChildUnitOfWork(_ambientUnitOfWork.UnitOfWork);
}

@ -0,0 +1,7 @@
namespace Volo.Abp.Uow
{
public class UnitOfWorkStartOptions
{
public bool RequiresNew { get; set; }
}
}

@ -34,6 +34,9 @@ namespace Volo.Abp.Uow
await uow2.CompleteAsync();
}
_unitOfWorkManager.Current.ShouldNotBeNull();
_unitOfWorkManager.Current.ShouldBe(uow1);
await uow1.CompleteAsync();
}

@ -0,0 +1,46 @@
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using Shouldly;
using Volo.Abp.Modularity;
using Volo.Abp.TestBase;
using Xunit;
namespace Volo.Abp.Uow
{
public class UnitOfWork_Nested_Tests : AbpIntegratedTest<IndependentEmptyModule>
{
private readonly IUnitOfWorkManager _unitOfWorkManager;
public UnitOfWork_Nested_Tests()
{
_unitOfWorkManager = ServiceProvider.GetRequiredService<IUnitOfWorkManager>();
}
[Fact]
public async Task Should_Create_Nested_UnitOfWorks()
{
_unitOfWorkManager.Current.ShouldBeNull();
using (var uow1 = _unitOfWorkManager.Begin())
{
_unitOfWorkManager.Current.ShouldNotBeNull();
_unitOfWorkManager.Current.ShouldBe(uow1);
using (var uow2 = _unitOfWorkManager.BeginNew())
{
_unitOfWorkManager.Current.ShouldNotBeNull();
_unitOfWorkManager.Current.Id.ShouldNotBe(uow1.Id);
await uow2.CompleteAsync();
}
_unitOfWorkManager.Current.ShouldNotBeNull();
_unitOfWorkManager.Current.ShouldBe(uow1);
await uow1.CompleteAsync();
}
_unitOfWorkManager.Current.ShouldBeNull();
}
}
}
Loading…
Cancel
Save