/// <summary> /// Specifies an existing <see cref="DbTransaction" /> to be used for database operations. /// </summary> /// <param name="transaction"> The transaction to be used. </param> public override IDbContextTransaction UseTransaction(DbTransaction transaction) { if (transaction == null) { if (CurrentTransaction != null) { CurrentTransaction = null; } } else { if (CurrentTransaction != null) { throw new InvalidOperationException(RelationalStrings.TransactionAlreadyStarted); } Open(); CurrentTransaction = new MySqlRelationalTransaction( this, transaction, Dependencies.TransactionLogger, transactionOwned: false); Dependencies.TransactionLogger.TransactionUsed( this, transaction, CurrentTransaction.TransactionId, DateTimeOffset.UtcNow); } return(CurrentTransaction); }
private async Task <IDbContextTransaction> BeginTransactionWithNoPreconditionsAsync(IsolationLevel isolationLevel, CancellationToken cancellationToken = default(CancellationToken)) { DbTransaction dbTransaction = null; if (DbConnection is MySqlConnection mySqlConnection) { dbTransaction = await mySqlConnection.BeginTransactionAsync(isolationLevel).ConfigureAwait(false); } else { dbTransaction = DbConnection.BeginTransaction(isolationLevel); } CurrentTransaction = new MySqlRelationalTransaction( this, dbTransaction, Dependencies.TransactionLogger, transactionOwned: true); Dependencies.TransactionLogger.TransactionStarted( this, dbTransaction, CurrentTransaction.TransactionId, DateTimeOffset.UtcNow); return(CurrentTransaction); }