protected object ExecuteCommand(IUnitOfWorkCommand command, UnitOfWorkInfo info) { var execution = BeginUnitOfWork(info); try { var result = command.Execute(); return(result); } catch (Exception e) { execution.HandleException(e); if (e is TargetInvocationException) { throw e.GetBaseException(); } throw; } finally { execution.End(); } }
/// <summary> /// Run a command in a new Unit Of Work. /// </summary> /// <seealso cref = "IUnitOfWorkCommand" /> /// <seealso cref = "UnitOfWorkInfo" /> /// <param name = "command">Command to execute.</param> /// <param name = "info">Unit of work information.</param> /// <returns>The return value of the Unit of Work.</returns> public void RunUnitOfWorkAsync(IUnitOfWorkCommand command, UnitOfWorkInfo info) { var worker = new BackgroundWorker(); if (IsUnitOfWorkRunning) { worker.DoWork += delegate { command.Execute(); }; } CallBegin(); worker.DoWork += delegate { try { lock (executionPermit) { ExecuteCommand(command, info); } } catch (Exception e) { CallUnhandledException(e); } finally { CallEnd(); } }; worker.RunWorkerAsync(); }
protected async Task <T> Execute <T>(IUnitOfWorkCommand <T> cmd) { T result = default(T); using (var unitOfWork = new UnitOfWork(_connectionProvider)) { try { result = await cmd.Invoke(unitOfWork); } catch (Exception e) { unitOfWork.Rollback(); throw e; } } return(result); }
public BaseEntityUnitOfWorkCommand(IUnitOfWorkCommand unitOfWork) => _unitOfWork = unitOfWork;
/// <summary> /// Run a command in a new Unit Of Work. /// </summary> /// <seealso cref = "IUnitOfWorkCommand" /> /// <seealso cref = "UnitOfWorkInfo" /> /// <param name = "command">Command to execute.</param> /// <param name = "info">Unit of work information.</param> /// <returns>The return value of the Unit of Work.</returns> public object RunUnitOfWork(IUnitOfWorkCommand command, UnitOfWorkInfo info) { return(IsUnitOfWorkRunning ? command.Execute() : ExecuteCommand(command, info)); }
public AmountModificationUowCommand(IUnitOfWorkCommand unitOfWork) : base(unitOfWork) { }
public TransactionUnitOfWorkCommand(IUnitOfWorkCommand unitOfWork) : base(unitOfWork) { }