103 lines
2.8 KiB
C#
103 lines
2.8 KiB
C#
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<T> : IRepository<T> where T : class
|
|
{
|
|
private readonly ApplicationDbContext _context;
|
|
internal DbSet<T> dbSet;
|
|
public Repository(ApplicationDbContext context)
|
|
{
|
|
_context = context;
|
|
this.dbSet = _context.Set<T>();
|
|
|
|
//_db.Products.Include(u => u.Category);
|
|
}
|
|
public void Add(T entity)
|
|
{
|
|
dbSet.Add(entity);
|
|
}
|
|
|
|
public T Get(Expression<Func<T, bool>> filter, string? includeProperties = null, bool tracked = false)
|
|
{
|
|
IQueryable<T> 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<T> GetAsync(Expression<Func<T, bool>> filter, bool tracked = false, params Expression<Func<T, object>>[] includeProperties)
|
|
{
|
|
IQueryable<T> 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<T> GetAll(Expression<Func<T, bool>>? filter = null, string? includeProperties = null)
|
|
{
|
|
IQueryable<T> 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<T> entity)
|
|
{
|
|
dbSet.RemoveRange(entity);
|
|
}
|
|
|
|
|
|
}
|
|
}
|