using Microsoft.EntityFrameworkCore; using SessionCompanion.Database.Tables; using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Text; using System.Threading.Tasks; namespace SessionCompanion.Database.Repositories.Base { public class Repository<T> : IRepository<T> where T : BaseEntity { protected ApplicationDbContext RepositoryContext { get; set; } public Repository(ApplicationDbContext repositoryContext) { this.RepositoryContext = repositoryContext; } public IQueryable<T> Get() { return this.RepositoryContext.Set<T>(); } public IQueryable<T> Get(Expression<Func<T, bool>> expression) { return this.RepositoryContext.Set<T>().Where(expression); } public Task<bool> Any(Expression<Func<T, bool>> expression) { return RepositoryContext.Set<T>().AnyAsync(expression); } public Task<bool> Any(int id) { return RepositoryContext.Set<T>().AnyAsync(n => n.Id == id); } public async Task<T> Get(int id) { return await RepositoryContext.Set<T>().FindAsync(id); } public virtual Task Create(T entity) { return Task.FromResult(RepositoryContext.Set<T>().AddAsync(entity)); } public virtual Task Update(T entity) { return Task.FromResult(RepositoryContext.Set<T>().Update(entity)); } public virtual void Delete(T entity) { this.RepositoryContext.Set<T>().Remove(entity); } public virtual async Task Save() { await RepositoryContext.SaveChangesAsync(); } public void Dispose() { RepositoryContext.Dispose(); } } }