using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using CleanArchitecture.Domain.Entities; using CleanArchitecture.Domain.Interfaces; using CleanArchitecture.Domain.Interfaces.Repositories; using Microsoft.EntityFrameworkCore; namespace CleanArchitecture.Infrastructure.Repositories; public class BaseRepository : IRepository where TEntity : Entity { protected readonly DbContext _dbContext; protected readonly DbSet _dbSet; public BaseRepository(DbContext context) { _dbContext = context; _dbSet = _dbContext.Set(); } public void Add(TEntity entity) { _dbSet.Add(entity); } public void AddRange(IEnumerable entities) { _dbSet.AddRange(entities); } public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } public virtual IQueryable GetAll() { return _dbSet; } public virtual IQueryable GetAllNoTracking() { return _dbSet.AsNoTracking(); } public virtual async Task GetByIdAsync(Guid id) { return await _dbSet.FindAsync(id); } public int SaveChanges() { return _dbContext.SaveChanges(); } protected virtual void Dispose(bool disposing) { if (disposing) { _dbContext.Dispose(); } } public virtual void Update(TEntity entity) { _dbSet.Update(entity); } public Task ExistsAsync(Guid id) { return _dbSet.AnyAsync(entity => entity.Id == id); } }