using Marco.Pms.DataAccess.Data; using Marco.Pms.DataAccess.Repository.IRepository; using Microsoft.EntityFrameworkCore; using System.Linq.Expressions; namespace Marco.Pms.DataAccess.Repository { public class Repository : IRepository where T : class { private readonly ApplicationDbContext _context; internal DbSet dbSet; public Repository(ApplicationDbContext context) { _context = context; this.dbSet = _context.Set(); //_db.Products.Include(u => u.Category); } public void Add(T entity) { dbSet.Add(entity); } public T Get(Expression> filter, string? includeProperties = null, bool tracked = false) { IQueryable query = dbSet; if (tracked) { query = query.Where(filter); } else { query = query.AsNoTracking().Where(filter); } if (!string.IsNullOrEmpty(includeProperties)) { foreach (var includeProp in includeProperties.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) { query = query.Include(includeProp); } } return query.FirstOrDefault(); } public async Task GetAsync(Expression> filter, bool tracked = false, params Expression>[] includeProperties) { IQueryable query = dbSet; if (tracked) { query = query.Where(filter); } else { query = query.AsNoTracking().Where(filter); } if (includeProperties != null) { foreach (var includeProp in includeProperties) { query = query.Include(includeProp); } } return await query.SingleOrDefaultAsync(); } public IEnumerable GetAll(Expression>? filter = null, string? includeProperties = null) { IQueryable query = dbSet; if(filter != null) { query.Where(filter); } if (!string.IsNullOrEmpty(includeProperties)) { foreach (var includeProp in includeProperties.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) { query = query.Include(includeProp); } } return query.ToList(); } public void Remove(T entity) { dbSet.Remove(entity); } public void RemoveRange(IEnumerable entity) { dbSet.RemoveRange(entity); } } }