Fixed #1417 EF Unit of work: Collection was modified; enumeration operation may not execute problem.

pull/1422/head
maliming 6 years ago
parent b497e07998
commit 3dc317b333

@ -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<IDatabaseApi> GetAllActiveDatabaseApis()
{
return _databaseApis.Values.ToImmutableList();
}
public IReadOnlyList<ITransactionApi> 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();
}

Loading…
Cancel
Save