Files
2025-05-20 11:46:50 -04:00

92 lines
2.6 KiB
C#

using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;
using WhiteLagoon.Application.Common.Interfaces;
using WhiteLagoon.Domain.Entities;
using WhiteLagoon.Infrastructure.Data;
namespace WhiteLagoon.Infrastructure.Repository
{
public class Repository<T> : IRepository<T> where T : class
{
private readonly ApplicationDbContext _db;
internal DbSet<T> dbSet;
public Repository(ApplicationDbContext db)
{
_db = db;
dbSet = _db.Set<T>();
}
public void Add(T entity)
{
dbSet.Add(entity);
}
public bool Any(Expression<Func<T, bool>> filter)
{
return dbSet.Any(filter);
}
public T Get(Expression<Func<T, bool>> filter, string? includeProperties = null, bool tracked = false)
{
IQueryable<T> query;
if (tracked)
{
query = dbSet;
}
else
{
query=dbSet.AsNoTracking();
}
if (filter != null)
{
query = query.Where(filter);
}
if (!string.IsNullOrEmpty(includeProperties))
{
//Villa,VillaNumber -- case sensitive
foreach (var includeProp in includeProperties
.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries))
{
query = query.Include(includeProp.Trim());
}
}
return query.FirstOrDefault();
}
public IEnumerable<T> GetAll(Expression<Func<T, bool>>? filter = null, string? includeProperties = null, bool tracked = false)
{
IQueryable<T> query;
if (tracked)
{
query = dbSet;
}
else
{
query = dbSet.AsNoTracking();
}
if (filter != null)
{
query = query.Where(filter);
}
if (!string.IsNullOrEmpty(includeProperties))
{
foreach (var includeProp in includeProperties
.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries))
{
query = query.Include(includeProp.Trim());
}
}
return query.ToList();
}
public void Remove(T entity)
{
dbSet.Remove(entity);
}
}
}