92 lines
2.6 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|