Package Description
License
—
Deps
4
Install Size
—
Vulns
✓ 0
Published
May 3, 2024
$ dotnet add package SDCores.Repositorypublic interface IRepository<T> where T : class
{
Task<T> FindById(object id);
Task<T> FindAsync(params object[] keyValues);
IQueryable<T> FindAll(bool? noTracking = false);
IQueryable<T> FindAll(Expression<Func<T, bool>> predicate, bool? noTracking = false);
void Add(T entity);
void AddMultiple(List<T> entities);
void Update(T entity);
void UpdateMultiple(List<T> entities);
void Remove(T entity);
void Remove(object id);
void RemoveMultiple(List<T> entities);
bool All(Expression<Func<T, bool>> predicate);
Task<bool> AllAsync(Expression<Func<T, bool>> predicate);
bool Any();
bool Any(Expression<Func<T, bool>> predicate);
Task<bool> AnyAsync();
Task<bool> AnyAsync(Expression<Func<T, bool>> predicate);
T FirstOrDefault(bool? noTracking = false);
T FirstOrDefault(Expression<Func<T, bool>> predicate, bool? noTracking = false);
Task<T> FirstOrDefaultAsync(bool? noTracking = false);
Task<T> FirstOrDefaultAsync(Expression<Func<T, bool>> predicate, bool? noTracking = false);
int Count();
int Count(Expression<Func<T, bool>> predicate);
Task<int> CountAsync();
Task<int> CountAsync(Expression<Func<T, bool>> predicate);
T LastOrDefault(bool? noTracking = false);
T LastOrDefault(Expression<Func<T, bool>> predicate, bool? noTracking = false);
Task<T> LastOrDefaultAsync(bool? noTracking = false);
Task<T> LastOrDefaultAsync(Expression<Func<T, bool>> predicate, bool? noTracking = false);
decimal Sum(Expression<Func<T, decimal>> selector);
decimal? Sum(Expression<Func<T, decimal?>> selector);
decimal Sum(Expression<Func<T, bool>> predicate, Expression<Func<T, decimal>> selector);
decimal? Sum(Expression<Func<T, bool>> predicate, Expression<Func<T, decimal?>> selector);
Task<decimal> SumAsync(Expression<Func<T, decimal>> selector);
Task<decimal?> SumAsync(Expression<Func<T, decimal?>> selector);
Task<decimal> SumAsync(Expression<Func<T, bool>> predicate, Expression<Func<T, decimal>> selector);
Task<decimal?> SumAsync(Expression<Func<T, bool>> predicate, Expression<Func<T, decimal?>> selector);
int Sum(Expression<Func<T, int>> selector);
int? Sum(Expression<Func<T, int?>> selector);
int Sum(Expression<Func<T, bool>> predicate, Expression<Func<T, int>> selector);
int? Sum(Expression<Func<T, bool>> predicate, Expression<Func<T, int?>> selector);
Task<int> SumAsync(Expression<Func<T, int>> selector);
Task<int?> SumAsync(Expression<Func<T, int?>> selector);
Task<int> SumAsync(Expression<Func<T, bool>> predicate, Expression<Func<T, int>> selector);
Task<int?> SumAsync(Expression<Func<T, bool>> predicate, Expression<Func<T, int?>> selector);
long Sum(Expression<Func<T, long>> selector);
long? Sum(Expression<Func<T, long?>> selector);
long Sum(Expression<Func<T, bool>> predicate, Expression<Func<T, long>> selector);
long? Sum(Expression<Func<T, bool>> predicate, Expression<Func<T, long?>> selector);
Task<long> SumAsync(Expression<Func<T, long>> selector);
Task<long?> SumAsync(Expression<Func<T, long?>> selector);
Task<long> SumAsync(Expression<Func<T, bool>> predicate, Expression<Func<T, long>> selector);
Task<long?> SumAsync(Expression<Func<T, bool>> predicate, Expression<Func<T, long?>> selector);
float Sum(Expression<Func<T, float>> selector);
float? Sum(Expression<Func<T, float?>> selector);
float Sum(Expression<Func<T, bool>> predicate, Expression<Func<T, float>> selector);
float? Sum(Expression<Func<T, bool>> predicate, Expression<Func<T, float?>> selector);
Task<float> SumAsync(Expression<Func<T, float>> selector);
Task<float?> SumAsync(Expression<Func<T, float?>> selector);
Task<float> SumAsync(Expression<Func<T, bool>> predicate, Expression<Func<T, float>> selector);
Task<float?> SumAsync(Expression<Func<T, bool>> predicate, Expression<Func<T, float?>> selector);
T Max();
TResult Max<TResult>(Expression<Func<T, TResult>> selector);
Task<T> MaxAsync();
Task<TResult> MaxAsync<TResult>(Expression<Func<T, TResult>> selector);
T Min();
TResult Min<TResult>(Expression<Func<T, TResult>> selector);
Task<T> MinAsync();
Task<TResult> MinAsync<TResult>(Expression<Func<T, TResult>> selector);
IQueryable<TResult> Select<TResult>(Expression<Func<T, TResult>> selector);
IQueryable<TResult> Select<TResult>(Expression<Func<T, int, TResult>> selector);
IQueryable<TResult> Select<TResult>(Expression<Func<T, bool>> predicate, Expression<Func<T, TResult>> selector);
IQueryable<TResult> Select<TResult>(Expression<Func<T, bool>> predicate, Expression<Func<T, int, TResult>> selector);
TResult SelectFirst<TResult>(Expression<Func<T, TResult>> selector);
TResult SelectFirst<TResult>(Expression<Func<T, int, TResult>> selector);
TResult SelectFirst<TResult>(Expression<Func<T, bool>> predicate, Expression<Func<T, TResult>> selector);
TResult SelectFirst<TResult>(Expression<Func<T, bool>> predicate, Expression<Func<T, int, TResult>> selector);
Task<List<TResult>> SelectAsync<TResult>(Expression<Func<T, TResult>> selector);
Task<List<TResult>> SelectAsync<TResult>(Expression<Func<T, int, TResult>> selector);
Task<List<TResult>> SelectAsync<TResult>(Expression<Func<T, bool>> predicate, Expression<Func<T, TResult>> selector);
Task<List<TResult>> SelectAsync<TResult>(Expression<Func<T, bool>> predicate, Expression<Func<T, int, TResult>> selector);
Task<TResult> SelectFirstAsync<TResult>(Expression<Func<T, TResult>> selector);
Task<TResult> SelectFirstAsync<TResult>(Expression<Func<T, int, TResult>> selector);
Task<TResult> SelectFirstAsync<TResult>(Expression<Func<T, bool>> predicate, Expression<Func<T, TResult>> selector);
Task<TResult> SelectFirstAsync<TResult>(Expression<Func<T, bool>> predicate, Expression<Func<T, int, TResult>> selector);
IQueryable<TDestination> MapTo<TDestination>() where TDestination : new();
TDestination MapOne<TDestination>() where TDestination : new();
Task<List<TDestination>> MapToAsync<TDestination>() where TDestination : new();
Task<TDestination> MapOneAsync<TDestination>() where TDestination : new();
...
}
Dynamic Repository DBContext
public class Repository<T, DBContext> : IRepository<T> where T : class where DBContext : DbContext
{
private readonly DBContext _context;
public Repository(DBContext context)
{
_context = context;
}
...
}
And then, I create Accessor class
...
using Microsoft.EntityFrameworkCore.Storage;
using SDCores;
namespace API._Repositories
{
[DependencyInjection(ServiceLifetime.Scoped)]
public interface IRepositoryAccessor
{
IRepository<ModelA> ModelA{get;}
...
Task<bool> Save();
Task<IDbContextTransaction> BeginTransactionAsync();
}
}
...
using Microsoft.EntityFrameworkCore.Storage;
using SDCores;
namespace API._Repositories
{
public class RepositoryAccessor : IRepositoryAccessor
{
private DBContext _dbContext;
public RepositoryAccessor(DBContext dbContext)
{
_dbContext = dbContext;
ModelA = new Repository<ModelA, DBContext>(_dbContext);
...
}
public IRepository<ModelA> ModelA { get; set; }
...
public async Task<bool> Save()
{
return await _dbContext.SaveChangesAsync() > 0;
}
public async Task<IDbContextTransaction> BeginTransactionAsync()
{
return await _dbContext.Database.BeginTransactionAsync();
}
}
}
And in Service, you use Accessor as follows
public interface IServiceA
{
void Do();
}
----------------------------------------------------------------------------------------------------
using SDCores;
public class ServiceA : IServiceA
{
private readonly IRepositoryAccessor _repoAccessor;
public ServiceA(IRepositoryAccessor repoAccessor) {
_repoAccessor = repoAccessor;
}
void Do()
{
var demo = _repoAccessor.ModelA.FirstOrDefaultAsync(x => ...);
...
}
}