using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.ChangeTracking; using LiveGameFeed.Data.Abstract; using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using LiveGameFeed.Models; namespace LiveGameFeed.Data.Repositories { public class EntityBaseRepository : IEntityBaseRepository where T : class, IEntityBase, new() { private LiveGameContext _context; #region Properties public EntityBaseRepository(LiveGameContext context) { _context = context; } #endregion public virtual IEnumerable GetAll() { return _context.Set().AsEnumerable(); } public virtual int Count() { return _context.Set().Count(); } public virtual IEnumerable AllIncluding(params Expression>[] includeProperties) { IQueryable query = _context.Set(); foreach (var includeProperty in includeProperties) { query = query.Include(includeProperty); } return query.AsEnumerable(); } public T GetSingle(int id) { return _context.Set().FirstOrDefault(x => x.Id == id); } public T GetSingle(Expression> predicate) { return _context.Set().FirstOrDefault(predicate); } public T GetSingle(Expression> predicate, params Expression>[] includeProperties) { IQueryable query = _context.Set(); foreach (var includeProperty in includeProperties) { query = query.Include(includeProperty); } return query.Where(predicate).FirstOrDefault(); } public virtual IEnumerable FindBy(Expression> predicate) { return _context.Set().Where(predicate); } public virtual void Add(T entity) { EntityEntry dbEntityEntry = _context.Entry(entity); _context.Set().Add(entity); } public virtual void Update(T entity) { EntityEntry dbEntityEntry = _context.Entry(entity); dbEntityEntry.State = EntityState.Modified; } public virtual void Delete(T entity) { EntityEntry dbEntityEntry = _context.Entry(entity); dbEntityEntry.State = EntityState.Deleted; } public virtual void DeleteWhere(Expression> predicate) { IEnumerable entities = _context.Set().Where(predicate); foreach(var entity in entities) { _context.Entry(entity).State = EntityState.Deleted; } } public virtual void Commit() { _context.SaveChanges(); } } }