public virtual TOutput ExecuteTransaction(TInput inputParameter, ApplicationUser currentUser, IDataContext dataContext) { if (dataContext.CurrentTransaction() != null) { return(Execute(inputParameter, currentUser, dataContext)); } using (var transaction = dataContext.BeginTransaction()) { try { var result = Execute(inputParameter, currentUser, dataContext); transaction.Commit(); PostSaveTask = PostExecuteAction?.Invoke(); return(result); } catch (Exception) { transaction.Rollback(); throw; } } }
//main method allows for form actions before and after conversation public void Execute(object context) { PreExecuteAction?.Invoke(context); if (InitiatorConv) { InitatorConversation(ref context); } else { ResponderConversation(ref context); } if (Error == null) { PostExecuteAction?.Invoke(context); } else { FailureAction?.Invoke(context); } Done = true; ConversationDictionary.Instance.CloseQueue(MyQueue.QueueID); }