Browse Source

Improved uow.

pull/112/head
Halil İbrahim Kalkan 9 years ago
parent
commit
83be48eff5
  1. 2
      src/Volo.Abp/Volo/Abp/Uow/ChildUnitOfWork.cs
  2. 2
      src/Volo.Abp/Volo/Abp/Uow/IUnitOfWork.cs
  3. 14
      src/Volo.Abp/Volo/Abp/Uow/IUnitOfWorkStartOptions.cs
  4. 33
      src/Volo.Abp/Volo/Abp/Uow/UnitOfWork.cs
  5. 2
      src/Volo.Abp/Volo/Abp/Uow/UnitOfWorkAttribute.cs
  6. 5
      src/Volo.Abp/Volo/Abp/Uow/UnitOfWorkManager.cs
  7. 23
      src/Volo.Abp/Volo/Abp/Uow/UnitOfWorkOptions.cs
  8. 17
      src/Volo.Abp/Volo/Abp/Uow/UnitOfWorkStartOptions.cs
  9. 2
      src/Volo.Abp/Volo/Abp/Uow/UnitOfWorkTransactionBehavior.cs

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

@ -9,7 +9,7 @@ namespace Volo.Abp.Uow
{
public Guid Id => _parent.Id;
public UnitOfWorkStartOptions Options => _parent.Options;
public IUnitOfWorkStartOptions Options => _parent.Options;
public IUnitOfWork Outer => _parent.Outer;

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

@ -4,7 +4,7 @@ namespace Volo.Abp.Uow
{
public interface IUnitOfWork : IBasicUnitOfWork, IDatabaseApiContainer, ITransactionApiContainer
{
UnitOfWorkStartOptions Options { get; }
IUnitOfWorkStartOptions Options { get; }
IUnitOfWork Outer { get; }

14
src/Volo.Abp/Volo/Abp/Uow/IUnitOfWorkStartOptions.cs

@ -0,0 +1,14 @@
using System;
using System.Data;
namespace Volo.Abp.Uow
{
public interface IUnitOfWorkStartOptions
{
bool IsTransactional { get; }
IsolationLevel? IsolationLevel { get; }
TimeSpan? Timeout { get; }
}
}

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

@ -2,6 +2,8 @@
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using JetBrains.Annotations;
using Microsoft.Extensions.Options;
using Volo.Abp.DependencyInjection;
namespace Volo.Abp.Uow
@ -10,7 +12,7 @@ namespace Volo.Abp.Uow
{
public Guid Id { get; } = Guid.NewGuid();
public UnitOfWorkStartOptions Options { get; private set; }
public IUnitOfWorkStartOptions Options { get; private set; }
public IUnitOfWork Outer { get; private set; }
@ -18,16 +20,6 @@ namespace Volo.Abp.Uow
public string ReservationName { get; set; }
public void SetOuter(IUnitOfWork outer)
{
Outer = outer;
}
public void SetOptions(UnitOfWorkStartOptions options)
{
Options = options;
}
public event EventHandler Completed;
public event EventHandler<UnitOfWorkFailedEventArgs> Failed;
public event EventHandler Disposed;
@ -36,19 +28,36 @@ namespace Volo.Abp.Uow
private readonly Dictionary<string, IDatabaseApi> _databaseApis;
private readonly Dictionary<string, ITransactionApi> _transactionApis;
private readonly UnitOfWorkOptions _defaultOptions;
private Exception _exception;
private bool _isCompleted;
private bool _isDisposed;
public UnitOfWork(IServiceProvider serviceProvider)
public UnitOfWork(IServiceProvider serviceProvider, IOptions<UnitOfWorkOptions> options)
{
ServiceProvider = serviceProvider;
_defaultOptions = options.Value;
_databaseApis = new Dictionary<string, IDatabaseApi>();
_transactionApis = new Dictionary<string, ITransactionApi>();
}
public void SetOptions(UnitOfWorkStartOptions options)
{
if (Options != null)
{
throw new AbpException("Options must be set only once!");
}
Options = _defaultOptions.Normalize(options.Clone());
}
public void SetOuter(IUnitOfWork outer)
{
Outer = outer;
}
public void SaveChanges()
{
foreach (var databaseApi in _databaseApis.Values)

2
src/Volo.Abp/Volo/Abp/Uow/UnitOfWorkAttribute.cs

@ -41,7 +41,7 @@ namespace Volo.Abp.Uow
{
if (IsTransactional.HasValue)
{
options.IsTransactional = IsTransactional;
options.IsTransactional = IsTransactional.Value;
}
if (Timeout.HasValue)

5
src/Volo.Abp/Volo/Abp/Uow/UnitOfWorkManager.cs

@ -1,5 +1,4 @@
using System;
using JetBrains.Annotations;
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.DependencyInjection;
@ -12,7 +11,9 @@ namespace Volo.Abp.Uow
private readonly IServiceProvider _serviceProvider;
private readonly IAmbientUnitOfWork _ambientUnitOfWork;
public UnitOfWorkManager(IServiceProvider serviceProvider, IAmbientUnitOfWork ambientUnitOfWork)
public UnitOfWorkManager(
IServiceProvider serviceProvider,
IAmbientUnitOfWork ambientUnitOfWork)
{
_serviceProvider = serviceProvider;
_ambientUnitOfWork = ambientUnitOfWork;

23
src/Volo.Abp/Volo/Abp/Uow/UnitOfWorkOptions.cs

@ -1,15 +1,34 @@
using System.Data;
using System;
using System.Data;
namespace Volo.Abp.Uow
{
//TODO: Implement default options!
/// <summary>
/// Global (default) unit of work options
/// </summary>
public class UnitOfWorkOptions
{
//TODO: Implement default options!
public UnitOfWorkTransactionBehavior TransactionBehavior { get; set; }
public IsolationLevel? IsolationLevel { get; set; }
public TimeSpan? Timeout { get; set; }
internal UnitOfWorkStartOptions Normalize(UnitOfWorkStartOptions options)
{
if (options.IsolationLevel == null)
{
options.IsolationLevel = IsolationLevel;
}
if (options.Timeout == null)
{
options.Timeout = Timeout;
}
return options;
}
}
}

17
src/Volo.Abp/Volo/Abp/Uow/UnitOfWorkStartOptions.cs

@ -3,12 +3,25 @@ using System.Data;
namespace Volo.Abp.Uow
{
public class UnitOfWorkStartOptions
public class UnitOfWorkStartOptions : IUnitOfWorkStartOptions
{
public bool? IsTransactional { get; set; }
/// <summary>
/// Default: false.
/// </summary>
public bool IsTransactional { get; set; }
public IsolationLevel? IsolationLevel { get; set; }
public TimeSpan? Timeout { get; set; }
public UnitOfWorkStartOptions Clone()
{
return new UnitOfWorkStartOptions
{
IsTransactional = IsTransactional,
IsolationLevel = IsolationLevel,
Timeout = Timeout
};
}
}
}

2
src/Volo.Abp/Volo/Abp/Uow/UnitOfWorkTransactionBehavior.cs

@ -3,7 +3,9 @@
public enum UnitOfWorkTransactionBehavior
{
Auto,
Enabled,
Disabled
}
}
Loading…
Cancel
Save