using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; namespace CQRS_Simple.Infrastructure.Uow { public class Repository : IRepository where T : Entity { private readonly IUnitOfWork _unitOfWork; public Repository(IUnitOfWork unitOfWork) { _unitOfWork = unitOfWork; } public void Add(T entity) { _unitOfWork.Context.Set().Add(entity); } public void Delete(T entity) { T existing = _unitOfWork.Context.Set().Find(entity); if (existing != null) _unitOfWork.Context.Set().Remove(existing); } public IUnitOfWork UnitOfWork => _unitOfWork; public T GetById(TPrimaryKey id) { return _unitOfWork.Context.Set().FirstOrDefault(x => id.Equals(x.Id)); } public Task GetByIdAsync(TPrimaryKey id) { return _unitOfWork.Context.Set().FirstOrDefaultAsync(x => id.Equals(x.Id)); } public IEnumerable GetAll() { return _unitOfWork.Context.Set().AsEnumerable(); } public IEnumerable Get(System.Linq.Expressions.Expression> predicate) { return _unitOfWork.Context.Set().Where(predicate).AsEnumerable(); } public void Update(T entity) { _unitOfWork.Context.Entry(entity).State = EntityState.Modified; _unitOfWork.Context.Set().Attach(entity); } public async Task> GetAllAsync() { return await _unitOfWork.Context.Set().ToListAsync(); } } }