using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Text; using System.Threading; using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using PlixP.Models; namespace PlixP.Repositories.Contracts { public interface IBaseRepository where T : Entity { DbSet Entities { get; } IQueryable Table { get; } IQueryable TableNoTracking { get; } void Add(T entity, bool saveNow = true); Task AddAsync(T entity, CancellationToken cancellationToken, bool saveNow = true); void AddRange(IEnumerable entities, bool saveNow = true); Task AddRangeAsync(IEnumerable entities, CancellationToken cancellationToken, bool saveNow = true); void Attach(T entity); void Delete(T entity, bool saveNow = true); Task DeleteAsync(T entity, CancellationToken cancellationToken, bool saveNow = true); Task HardDeleteAsync(T entity, CancellationToken cancellationToken, bool saveNow = true); void DeleteRange(IEnumerable entities, bool saveNow = true); Task DeleteRangeAsync(IEnumerable entities, CancellationToken cancellationToken, bool saveNow = true); void Detach(T entity); T GetById(params object[] ids); Task GetByIdAsync(CancellationToken cancellationToken, params object[] ids); void LoadCollection(T entity, Expression>> collectionProperty) where TProperty : class; Task LoadCollectionAsync(T entity, Expression>> collectionProperty, CancellationToken cancellationToken) where TProperty : class; void LoadReference(T entity, Expression> referenceProperty) where TProperty : class; Task LoadReferenceAsync(T entity, Expression> referenceProperty, CancellationToken cancellationToken) where TProperty : class; void Update(T entity, bool saveNow = true); Task UpdateAsync(T entity, CancellationToken cancellationToken, bool saveNow = true); void UpdateRange(IEnumerable entities, bool saveNow = true); Task UpdateRangeAsync(IEnumerable entities, CancellationToken cancellationToken, bool saveNow = true); } }