Skip to content

IUnitOfWork

Transaction management across repositories.

Methods

MethodReturnDescription
SaveChangesAsync(CancellationToken)Task<int>Save all changes
BeginTransactionAsync(CancellationToken)TaskBegin transaction
CommitTransactionAsync(CancellationToken)TaskCommit transaction
RollbackTransactionAsync(CancellationToken)TaskRollback transaction

Usage

csharp
public class TransferFundsCommandHandler : ICommandHandler&lt;TransferFundsCommand&gt;
{
    private readonly IAccountRepository _accounts;
    private readonly IUnitOfWork _unitOfWork;

    public async Task&lt;Result&gt; Handle(TransferFundsCommand cmd, CancellationToken ct)
    {
        await _unitOfWork.BeginTransactionAsync(ct);
        try
        {
            var from = await _accounts.GetByIdAsync(cmd.FromId, ct);
            var to = await _accounts.GetByIdAsync(cmd.ToId, ct);

            from.Withdraw(cmd.Amount);
            to.Deposit(cmd.Amount);

            await _unitOfWork.SaveChangesAsync(ct);
            await _unitOfWork.CommitTransactionAsync(ct);
            return Result.Success();
        }
        catch
        {
            await _unitOfWork.RollbackTransactionAsync(ct);
            throw;
        }
    }
}

Released under the MIT License.