using Hushian.Application.Contracts.Persistence; using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; using System.Linq.Expressions; using System.Security.Principal; using System.Text; using System.Threading.Tasks; namespace Hushian.Persistence.Repositories { public class GenericRepository : IGenericRepository where T : class { private readonly HushianDbContext _context; private readonly DbSet _query; public GenericRepository(HushianDbContext context) { _context = context; _query = _context.Set(); } public async Task ADD(T entity) { try { await _context.AddAsync(entity); if ((await _context.SaveChangesAsync() == 1)) return entity; return null; } catch (Exception e) { return null; } } public async Task ADDBool(T entity) { await _context.AddAsync(entity); return (await _context.SaveChangesAsync() == 1); } public async Task> ADD(ICollection entities) { try { await _context.AddRangeAsync(entities); if ((await _context.SaveChangesAsync() == entities.Count())) return entities; return null; } catch (Exception e) { return null; } } public async Task UPDATE(T entity) { try { _context.Entry(entity).State = EntityState.Modified; if ((await _context.SaveChangesAsync() == 1)) return entity; return null; } catch (Exception e) { return null; } } public async Task UPDATEBool(T entity) { _context.Entry(entity).State = EntityState.Modified; return (await _context.SaveChangesAsync() == 1); } public async Task> UPDATE(ICollection entities) { try { foreach (var entity in entities) _context.Entry(entity).State = EntityState.Modified; if ((await _context.SaveChangesAsync()) == entities.Count()) return entities; return null; } catch (Exception e) { return null; } } public async Task DELETE(T entity) { try { _context.Set().Remove(entity); return (await _context.SaveChangesAsync() == 1); } catch (Exception e) { return false; } } public async Task DELETE(ICollection entities) { try { _context.Set().RemoveRange(entities); return (await _context.SaveChangesAsync() == entities.Count()); } catch (Exception e) { return false; } } public IQueryable Get() { //No track return _query.AsNoTracking().AsQueryable(); } } }