50 lines
1.3 KiB
C#
50 lines
1.3 KiB
C#
using Microsoft.EntityFrameworkCore.Storage;
|
|
|
|
namespace AuthHex.Infra.UoW
|
|
{
|
|
public class EFUnitOfWork : IUnitOfWork
|
|
{
|
|
private readonly AppDBContext _dbContext;
|
|
private IDbContextTransaction? _transaction;
|
|
|
|
public EFUnitOfWork(AppDBContext dbContext)
|
|
{
|
|
_dbContext = dbContext;
|
|
}
|
|
|
|
public async Task BeginAsync(CancellationToken ct = default)
|
|
{
|
|
if (_transaction == null)
|
|
_transaction = await _dbContext.Database.BeginTransactionAsync(ct);
|
|
}
|
|
|
|
public async Task SaveChangesAsync(CancellationToken ct = default)
|
|
{
|
|
await _dbContext.SaveChangesAsync(ct);
|
|
}
|
|
|
|
public async Task CommitAsync(CancellationToken ct = default)
|
|
{
|
|
await _dbContext.SaveChangesAsync(ct);
|
|
|
|
if (_transaction != null)
|
|
{
|
|
await _transaction.CommitAsync(ct);
|
|
await _transaction.DisposeAsync();
|
|
_transaction = null;
|
|
}
|
|
}
|
|
|
|
public async Task RollbackAsync(CancellationToken ct = default)
|
|
{
|
|
if (_transaction != null)
|
|
{
|
|
await _transaction.RollbackAsync(ct);
|
|
await _transaction.DisposeAsync();
|
|
_transaction = null;
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|