Browse Source

Merge pull request #1422 from abpframework/maliming/unitofwork

Fixed #1417 EF Unit of work: Collection was modified; enumeration operation may not execute problem.
pull/1432/head
Halil İbrahim Kalkan 7 years ago
committed by GitHub
parent
commit
a969af2b55
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 29
      framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWork.cs

29
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<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