IUnitOfWork
Transaction management across repositories.
Methods
| Method | Return | Description |
|---|---|---|
| SaveChangesAsync(CancellationToken) | Task<int> | Save all changes |
| BeginTransactionAsync(CancellationToken) | Task | Begin transaction |
| CommitTransactionAsync(CancellationToken) | Task | Commit transaction |
| RollbackTransactionAsync(CancellationToken) | Task | Rollback transaction |
Usage
csharp
public class TransferFundsCommandHandler : ICommandHandler<TransferFundsCommand>
{
private readonly IAccountRepository _accounts;
private readonly IUnitOfWork _unitOfWork;
public async Task<Result> 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;
}
}
}