public void BeginReserved(string reservationName, IUnitOfWorkOptions unitOfWorkOptions) { if (!TryBeginReserved(reservationName, unitOfWorkOptions)) { throw new XpressException($"Could not find a reserved unit of work with reservation name: {reservationName}"); } }
public virtual void Initialize(IUnitOfWorkOptions unitOfWorkOptions) { Check.NotNull(unitOfWorkOptions, nameof(unitOfWorkOptions)); if (UnitOfWorkOptions != null) { throw new XpressException("This unit of work is already initialized before!"); } else { IsReserved = false; UnitOfWorkOptions = unitOfWorkOptions.Clone(); if (UnitOfWorkOptions.IsTransactional) { if (_dbContextProvider.DbContextTransaction == null) { var isoLationLevel = UnitOfWorkOptions.IsolationLevel; _dbContextProvider.DbContextTransaction = _dbContextProvider.GetDbContext().Database.BeginTransaction(isoLationLevel); } else { var dbTransaction = _dbContextProvider.DbContextTransaction.GetDbTransaction(); _dbContextProvider.GetDbContext().Database.UseTransaction(dbTransaction); } } } }
private void ProcceesAvailableTransactionsAsync(IInvocation invocation, IUnitOfWorkOptions unitOfWorkOptions) { this._unitOfWorkAsync.BeginTransaction(unitOfWorkOptions); try { invocation.Proceed(); } catch { _unitOfWorkAsync.Dispose(); throw; } if (invocation.Method.ReturnType == typeof(Task)) { invocation.ReturnValue = PublicAsyncHelper.AwaitTaskWithPostActionAndFinally( (Task)invocation.ReturnValue, async() => await _unitOfWorkAsync.CommitAsync(), exception => _unitOfWorkAsync.Dispose() ); } else //Task<TResult> { invocation.ReturnValue = PublicAsyncHelper.CallAwaitTaskWithPostActionAndFinallyAndGetResult( invocation.Method.ReturnType.GenericTypeArguments[0], invocation.ReturnValue, async() => await _unitOfWorkAsync.CommitAsync(), exception => _unitOfWorkAsync.Dispose() ); } }
private void ProccessUnitOfWork(IInvocation invocation, IUnitOfWorkOptions unitOfWorkOptions) { if (AsyncHelper.IsAsyncMethod(invocation.Method)) { ProcceesAvailableTransactionsAsync(invocation, unitOfWorkOptions); } else { ProcceesAvailableTransactions(invocation, unitOfWorkOptions); } }
private void ProcceesAvailableTransactions(IInvocation invocation, IUnitOfWorkOptions unitOfWorkOptions) { this._unitOfWorkAsync.BeginTransaction(unitOfWorkOptions); try { invocation.Proceed(); } catch { _unitOfWorkAsync.Dispose(); throw; } this._unitOfWorkAsync.Commit(); }
public async Task BeginTransactionAsync(IUnitOfWorkOptions unitOfWorkOptions = default) { if (unitOfWorkOptions == default) { _transaction = await((DbContext)_dataContext).Database.BeginTransactionAsync(); } else { if (unitOfWorkOptions.Timeout.HasValue) { ((DbContext)_dataContext).Database.SetCommandTimeout(unitOfWorkOptions.Timeout.Value); } _transaction = unitOfWorkOptions.IsolationLevel.HasValue ? await((DbContext)_dataContext).Database.BeginTransactionAsync(unitOfWorkOptions.IsolationLevel.Value) : await((DbContext)_dataContext).Database.BeginTransactionAsync(); } }
public virtual void BeginTransaction(IUnitOfWorkOptions unitOfWorkOptions) { _dbContextAddedEvent += context => { if (unitOfWorkOptions.IsolationLevel == null) { unitOfWorkOptions.IsolationLevel = System.Data.IsolationLevel.ReadCommitted; } UnitOfWorkOptions = unitOfWorkOptions; if (UnitOfWorkOptions.IsolationLevel != null) { var tran = context.Database.BeginTransaction(UnitOfWorkOptions.IsolationLevel.Value); Transactions.Add(context.Name, tran); } }; }
public IUnitOfWork Begin(IUnitOfWorkOptions unitOfWorkOptions, bool requiresNew = false) { Check.NotNull(unitOfWorkOptions, nameof(unitOfWorkOptions)); var currentUow = Current; if (currentUow != null && !requiresNew) { return(new ChildUnitOfWork(currentUow)); } else { var unitOfWork = CreateNewUnitOfWork(); unitOfWork.Initialize(unitOfWorkOptions); return(unitOfWork); } }
public void BeginTransaction(IUnitOfWorkOptions unitOfWorkOptions = default) { if (unitOfWorkOptions == default) { _transaction = ((DbContext)_dataContext).Database.BeginTransaction(); } else { if (unitOfWorkOptions.Timeout.HasValue) { ((DbContext)_dataContext).Database.SetCommandTimeout(unitOfWorkOptions.Timeout.Value); } _transaction = unitOfWorkOptions.IsolationLevel.HasValue ? ((DbContext)_dataContext).Database.BeginTransaction(unitOfWorkOptions.IsolationLevel.Value) : ((DbContext)_dataContext).Database.BeginTransaction(); } }
public void FillDefaultsForNonProvidedOptions(IUnitOfWorkOptions defaultOptions) { if (!Timeout.HasValue && defaultOptions.Timeout.HasValue) { Timeout = defaultOptions.Timeout.Value; } if (!IsolationLevel.HasValue && defaultOptions.IsolationLevel.HasValue) { IsolationLevel = defaultOptions.IsolationLevel.Value; } if (!IsLazyLoadEnabled.HasValue) { IsLazyLoadEnabled = defaultOptions.IsLazyLoadEnabled; } }
public bool TryBeginReserved(string reservationName, IUnitOfWorkOptions unitOfWorkOptions) { Check.NotNull(reservationName, nameof(reservationName)); //Find reserved unit of work starting from current and going to outers var ambientUnitOfWork = _unitOfWorkAccessor.UnitOfWork; while (ambientUnitOfWork != null && !ambientUnitOfWork.IsReservedFor(reservationName)) { ambientUnitOfWork = ambientUnitOfWork.Outer; } if (ambientUnitOfWork == null) { return(false); } else { ambientUnitOfWork.Initialize(unitOfWorkOptions); return(true); } }
public void BeginTransaction(IUnitOfWorkOptions unitOfWorkOptions) { throw new NotImplementedException(); }
public UnitOfWorkBase(IUnitOfWorkOptions unitOfWorkOptions) { _filterStatus = new ConcurrentDictionary <string, bool>(unitOfWorkOptions.GetAllFilters()); }
public void BeginTransaction(IUnitOfWorkOptions unitOfWorkOptions = default) => BeginTransactionAsync(unitOfWorkOptions).ConfigureAwait(false) .GetAwaiter() .GetResult();
public Task BeginTransactionAsync(IUnitOfWorkOptions unitOfWorkOptions) { throw new NotImplementedException(); }
public EnableUnitOfWorkAttribute() { UnitOfWorkOptions = new UnitOfWorkOptions(); }
public void Initialize(IUnitOfWorkOptions unitOfWorkOptions) { _parent.Initialize(unitOfWorkOptions); }
public UowActionFilter(IUnitOfWorkManager unitOfWorkManager, DefaultUnitOfWorkOptions defaultUnitOfWorkOptions) { _unitOfWorkManager = unitOfWorkManager; _defaultUnitOfWorkOptions = defaultUnitOfWorkOptions.Clone(); }
public UnitOfWorkInterceptor(DefaultUnitOfWorkOptions unitOfWorkOptions, IUnitOfWorkManager unitOfWorkManager) { _defaultUnitOfWorkOptions = unitOfWorkOptions.Clone(); _unitOfWorkManager = unitOfWorkManager; }