private void FailIfTransactionStartedDespiteDisablingIt(TransactionsContainer transactionsContainer, [NotNull] ConnectToAttribute[] disabledTransactions) { Fail.IfArgumentNull(disabledTransactions, nameof(disabledTransactions)); foreach (ConnectToAttribute disabledTransaction in disabledTransactions) { IDatabase database = this.GetDatabaseForAutoTransaction(disabledTransaction); ISession session = transactionsContainer.StartSession(database); Fail.IfTrue( session.Transaction.IsActive, "Transaction is started to database {0} and it shouldn't be due to attribute {1}", database, disabledTransaction); } }
private TransactionsContainer AutostartTransactions([NotNull] ConnectToAttribute[] enabledTransactions) { Fail.IfArgumentNull(enabledTransactions, nameof(enabledTransactions)); var container = new TransactionsContainer(); foreach (ConnectToAttribute transactionalAttribute in enabledTransactions) { IDatabase database = this.GetDatabaseForAutoTransaction(transactionalAttribute); IsolationLevel isolationLevel = transactionalAttribute.IsolationLevel; container.StartTransaction(database, isolationLevel); } return(container); }
/// <inheritdoc /> public TransactionsContainer StartTransactionsFor(MethodInfo method) { Fail.IfArgumentNull(method, nameof(method)); List <ConnectToAttribute> transactionAttributes = TransactionCoordinator.GetAutoTransactionAttributesFor(method); // Remove all the attributes with disabled transaction var enabledTransactions = transactionAttributes.Where(t => t.Transactional).ToArray(); TransactionsContainer transactionsContainer = this.AutostartTransactions(enabledTransactions); var disabledTransactions = transactionAttributes.Where(t => t.Transactional = false).ToArray(); this.FailIfTransactionStartedDespiteDisablingIt(transactionsContainer, disabledTransactions); return(transactionsContainer); }