using System.Threading;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using xDataService.Interfaces;
using xModels.Base;
namespace xDataService.Db {
///
/// Provide Unit Of Works Design Pattern for Db Transactions ...
/// Only Used on EFCore ...
///
///
public class XUnitOfWorks : IXUnitOfWorks
where TDbContext : XDbContext {
public TDbContext DbContext { get; }
public XUnitOfWorks (TDbContext context) {
this.DbContext = context;
}
public DbSet GetDbSet ()
where T : XBaseEntity {
return DbContext.Set ();
}
///
/// Save Changes
///
public int SaveChanges () {
return DbContext.SaveChanges ();
}
///
/// Save Changes Async
///
///
///
public async Task SaveChangesAsync (
CancellationToken cancellationToken = default
) {
return await DbContext.SaveChangesAsync (cancellationToken);
}
public void Dispose () {
DbContext.Dispose ();
}
}
}