diff --git a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWork.cs b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWork.cs index f6501ae833..0270e04d50 100644 --- a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWork.cs +++ b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWork.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Collections.Immutable; using System.Threading; using System.Threading.Tasks; using Microsoft.Extensions.Options; @@ -76,7 +77,7 @@ namespace Volo.Abp.Uow public virtual void SaveChanges() { - foreach (var databaseApi in _databaseApis.Values) + foreach (var databaseApi in GetAllActiveDatabaseApis()) { (databaseApi as ISupportsSavingChanges)?.SaveChanges(); } @@ -84,7 +85,7 @@ namespace Volo.Abp.Uow public virtual async Task SaveChangesAsync(CancellationToken cancellationToken = default) { - foreach (var databaseApi in _databaseApis.Values) + foreach (var databaseApi in GetAllActiveDatabaseApis()) { if (databaseApi is ISupportsSavingChanges) { @@ -93,6 +94,16 @@ namespace Volo.Abp.Uow } } + public IReadOnlyList GetAllActiveDatabaseApis() + { + return _databaseApis.Values.ToImmutableList(); + } + + public IReadOnlyList GetAllActiveTransactionApis() + { + return _transactionApis.Values.ToImmutableList(); + } + public virtual void Complete() { if (_isRolledback) @@ -276,7 +287,7 @@ namespace Volo.Abp.Uow private void DisposeTransactions() { - foreach (var transactionApi in _transactionApis.Values) + foreach (var transactionApi in GetAllActiveTransactionApis()) { try { @@ -298,7 +309,7 @@ namespace Volo.Abp.Uow protected virtual void RollbackAll() { - foreach (var databaseApi in _databaseApis.Values) + foreach (var databaseApi in GetAllActiveDatabaseApis()) { try { @@ -307,7 +318,7 @@ namespace Volo.Abp.Uow catch { } } - foreach (var transactionApi in _transactionApis.Values) + foreach (var transactionApi in GetAllActiveTransactionApis()) { try { @@ -319,7 +330,7 @@ namespace Volo.Abp.Uow protected virtual async Task RollbackAllAsync(CancellationToken cancellationToken) { - foreach (var databaseApi in _databaseApis.Values) + foreach (var databaseApi in GetAllActiveDatabaseApis()) { if (databaseApi is ISupportsRollback) { @@ -331,7 +342,7 @@ namespace Volo.Abp.Uow } } - foreach (var transactionApi in _transactionApis.Values) + foreach (var transactionApi in GetAllActiveTransactionApis()) { if (transactionApi is ISupportsRollback) { @@ -346,7 +357,7 @@ namespace Volo.Abp.Uow protected virtual void CommitTransactions() { - foreach (var transaction in _transactionApis.Values) + foreach (var transaction in GetAllActiveTransactionApis()) { transaction.Commit(); } @@ -354,7 +365,7 @@ namespace Volo.Abp.Uow protected virtual async Task CommitTransactionsAsync() { - foreach (var transaction in _transactionApis.Values) + foreach (var transaction in GetAllActiveTransactionApis()) { await transaction.CommitAsync(); }