using System.Linq.Expressions; using DataLayer.Interfaces; using Domain; using Microsoft.EntityFrameworkCore; namespace DataLayer; public class AbstractRepository : IAbstractRepository where T : BaseEntity { public AbstractRepository(DeathwatchDbContext deathwatchDbContext) { _deathwatchDbContext = deathwatchDbContext; _entities = _deathwatchDbContext.Set(); } #region Fields private readonly DeathwatchDbContext _deathwatchDbContext; private readonly DbSet _entities; #endregion #region Public Methods public async Task GetById(int id) { return await _entities.FindAsync(id); } public async Task FirstOrDefault(Expression> predicate) { var entity = await _entities.FirstOrDefaultAsync(predicate); return entity; } public async Task Add(T entity) { await _entities.AddAsync(entity); await _deathwatchDbContext.SaveChangesAsync(); } public Task Update(T entity) { // In case AsNoTracking is used _deathwatchDbContext.Entry(entity).State = EntityState.Modified; return _deathwatchDbContext.SaveChangesAsync(); } public Task Remove(T entity) { _entities.Remove(entity); return _deathwatchDbContext.SaveChangesAsync(); } public async Task> GetAll() { var entries = await _entities.ToListAsync(); return entries; } public async Task> GetWhere(Expression> predicate) { return await _entities.Where(predicate).ToListAsync(); } public Task CountAll() { return _entities.CountAsync(); } public Task CountWhere(Expression> predicate) { return _entities.CountAsync(predicate); } #endregion }