protected virtual void Dispose(bool disposing)
        {
            bool wasSucceeded = ScopeStatusManager.WasSucceeded();

            foreach (DbConnectionAndTransactionPair dbAndTran in DbConnectionAndTransactions)
            {
                try
                {
                    if (dbAndTran.RollbackOnScopeStatusFailure == false)
                    {
                        dbAndTran.Transaction?.Commit();
                    }
                    else
                    {
                        if (wasSucceeded)
                        {
                            dbAndTran.Transaction?.Commit();
                        }
                        else
                        {
                            dbAndTran.Transaction?.Rollback();
                        }
                    }
                }
                finally
                {
                    dbAndTran.Transaction?.Dispose();
                    dbAndTran.Connection.Dispose();
                }
            }
        }
Пример #2
0
        public async ValueTask DisposeAsync()
        {
            bool wasSucceeded = ScopeStatusManager.WasSucceeded();

            foreach (DbConnectionAndTransactionPair dbAndTran in DbConnectionAndTransactions)
            {
                try
                {
                    if (dbAndTran.RollbackOnScopeStatusFailure == false)
                    {
                        if (dbAndTran.Transaction != null)
                        {
                            await dbAndTran.Transaction.CommitAsync().ConfigureAwait(false);
                        }
                    }
                    else
                    {
                        if (wasSucceeded)
                        {
                            if (dbAndTran.Transaction != null)
                            {
                                await dbAndTran.Transaction.CommitAsync().ConfigureAwait(false);
                            }
                        }
                        else
                        {
                            if (dbAndTran.Transaction != null)
                            {
                                await dbAndTran.Transaction.RollbackAsync().ConfigureAwait(false);
                            }
                        }
                    }
                }
                finally
                {
                    if (dbAndTran.Transaction != null)
                    {
                        await dbAndTran.Transaction.DisposeAsync();
                    }
                    await dbAndTran.Connection.DisposeAsync();
                }
            }
        }