fix(transaction): retain both transaction failures

Keep the original action or commit failure visible alongside a failed rollback and cover owned transaction reuse.

Ref: IT-1588
This commit is contained in:
2026-10-15 14:13:56 +03:00
parent 1da2dd8579
commit 5dd8342bf7
8 changed files with 334 additions and 7 deletions
@@ -0,0 +1,42 @@
namespace HrynCo.DAL.EF.Tests;
using System.Data.Common;
using Microsoft.EntityFrameworkCore.Diagnostics;
internal sealed class TransactionFailureInterceptor : DbTransactionInterceptor
{
public Exception? CommitException { get; init; }
public Exception? RollbackException { get; init; }
public int CommitAttempts { get; private set; }
public int RollbackAttempts { get; private set; }
public override ValueTask<InterceptionResult> TransactionCommittingAsync(
DbTransaction transaction,
TransactionEventData eventData,
InterceptionResult result,
CancellationToken cancellationToken = default)
{
CommitAttempts++;
if (CommitException is not null)
{
throw CommitException;
}
return ValueTask.FromResult(result);
}
public override ValueTask<InterceptionResult> TransactionRollingBackAsync(
DbTransaction transaction,
TransactionEventData eventData,
InterceptionResult result,
CancellationToken cancellationToken = default)
{
RollbackAttempts++;
if (RollbackException is not null)
{
throw RollbackException;
}
return ValueTask.FromResult(result);
}
}