using KanSan.DataStoring.Contract; using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Linq.Expressions; using System.Text; namespace DataStoring.EF { public class Repository : IRepository where TEntity : class { private readonly KanSanContext _db; private readonly DbSet dbSet; public IQueryable Query => dbSet; public Repository(KanSanContext db) { _db = db; this.dbSet = db.Set(); } public virtual void Delete(TEntity entityToDelete) { if (_db.Entry(entityToDelete).State == EntityState.Detached) dbSet.Attach(entityToDelete); dbSet.Remove(entityToDelete); } public void Delete(int id) { try { var entity = _db.Set().Find(id); if(entity == null) { throw new Exception("Id not found"); } } catch(Exception e) { throw new Exception("Cant delete id"); } } public IEnumerable GetAll(string include) { return dbSet.Include(include); } public IEnumerable Get(Expression> filter = null, Func, IOrderedQueryable> orderBy = null, string includeProperties = "") { IQueryable query = dbSet; if (filter != null) { query = query.Where(filter); } if (includeProperties != null) { foreach (var includeProperty in includeProperties.Split (new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) { query = query.Include(includeProperty); } } if (orderBy != null) { return orderBy(query).ToList(); } else { return query.ToList(); } } public TEntity GetByID(object id) { return dbSet.Find(id); } public virtual void Insert(TEntity entity) { _db.Set().Add(entity); _db.SaveChanges(); } public IQueryable Include(params Expression>[] includeExpressions) { IQueryable query = null; foreach (var include in includeExpressions) { query = dbSet.Include(include); } return query ?? dbSet; } public void Update(TEntity entity) { _db.Entry(entity).State = EntityState.Modified; _db.SaveChanges(); } } }