< Summary

Information
Class: Pozitron.QuerySpecification.RepositoryBase<T>
Assembly: Pozitron.QuerySpecification.EntityFrameworkCore
File(s): /home/runner/work/QuerySpecification/QuerySpecification/src/QuerySpecification.EntityFrameworkCore/RepositoryBase.cs
Tag: 44_11195777782
Line coverage
100%
Covered lines: 63
Uncovered lines: 0
Coverable lines: 63
Total lines: 139
Line coverage: 100%
Branch coverage
100%
Covered branches: 4
Total branches: 4
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
.ctor(...)100%11100%
AddAsync()100%11100%
AddRangeAsync()100%11100%
UpdateAsync()100%11100%
DeleteAsync()100%11100%
DeleteRangeAsync()100%11100%
SaveChangesAsync()100%11100%
FindAsync()100%11100%
FirstAsync()100%22100%
FirstAsync()100%22100%
FirstOrDefaultAsync()100%11100%
FirstOrDefaultAsync()100%11100%
SingleOrDefaultAsync()100%11100%
SingleOrDefaultAsync()100%11100%
ListAsync()100%11100%
ListAsync()100%11100%
ListAsync()100%11100%
CountAsync()100%11100%
CountAsync()100%11100%
CountAsync()100%11100%
AnyAsync()100%11100%
AnyAsync()100%11100%
AnyAsync()100%11100%
AsAsyncEnumerable(...)100%11100%
GenerateQuery(...)100%11100%
GenerateQuery(...)100%11100%

File(s)

/home/runner/work/QuerySpecification/QuerySpecification/src/QuerySpecification.EntityFrameworkCore/RepositoryBase.cs

#LineLine coverage
 1namespace Pozitron.QuerySpecification;
 2
 3public abstract class RepositoryBase<T> : IRepositoryBase<T> where T : class
 4{
 5    private readonly DbContext _dbContext;
 6    private readonly SpecificationEvaluator _evaluator;
 7
 8    protected RepositoryBase(DbContext dbContext)
 499        : this(dbContext, SpecificationEvaluator.Default)
 10    {
 4911    }
 5112    protected RepositoryBase(DbContext dbContext, SpecificationEvaluator specificationEvaluator)
 13    {
 5114        _dbContext = dbContext;
 5115        _evaluator = specificationEvaluator;
 5116    }
 17
 18    public virtual async Task<T> AddAsync(T entity, CancellationToken cancellationToken = default)
 19    {
 120        _dbContext.Set<T>().Add(entity);
 21
 122        await SaveChangesAsync(cancellationToken);
 23
 124        return entity;
 125    }
 26    public virtual async Task<IEnumerable<T>> AddRangeAsync(IEnumerable<T> entities, CancellationToken cancellationToken
 27    {
 128        _dbContext.Set<T>().AddRange(entities);
 29
 130        await SaveChangesAsync(cancellationToken);
 31
 132        return entities;
 133    }
 34    public virtual async Task UpdateAsync(T entity, CancellationToken cancellationToken = default)
 35    {
 36        //dbContext.Set<T>().Update(entity);
 37
 138        await SaveChangesAsync(cancellationToken);
 139    }
 40    public virtual async Task DeleteAsync(T entity, CancellationToken cancellationToken = default)
 41    {
 142        _dbContext.Set<T>().Remove(entity);
 43
 144        await SaveChangesAsync(cancellationToken);
 145    }
 46    public virtual async Task DeleteRangeAsync(IEnumerable<T> entities, CancellationToken cancellationToken = default)
 47    {
 148        _dbContext.Set<T>().RemoveRange(entities);
 49
 150        await SaveChangesAsync(cancellationToken);
 151    }
 52    public virtual async Task<int> SaveChangesAsync(CancellationToken cancellationToken = default)
 53    {
 554        return await _dbContext.SaveChangesAsync(cancellationToken);
 555    }
 56
 57    public virtual async ValueTask<T?> FindAsync<TId>(TId id, CancellationToken cancellationToken = default) where TId :
 58    {
 359        return await _dbContext.Set<T>().FindAsync([id], cancellationToken: cancellationToken);
 360    }
 61    public virtual async Task<T> FirstAsync(Specification<T> specification, CancellationToken cancellationToken = defaul
 62    {
 263        var result = await GenerateQuery(specification).FirstOrDefaultAsync(cancellationToken);
 264        return result ?? throw new EntityNotFoundException(typeof(T).Name);
 165    }
 66    public virtual async Task<TResult> FirstAsync<TResult>(Specification<T, TResult> specification, CancellationToken ca
 67    {
 268        var result = await GenerateQuery(specification).FirstOrDefaultAsync(cancellationToken);
 269        return result ?? throw new EntityNotFoundException(typeof(T).Name);
 170    }
 71    public virtual async Task<T?> FirstOrDefaultAsync(Specification<T> specification, CancellationToken cancellationToke
 72    {
 273        return await GenerateQuery(specification).FirstOrDefaultAsync(cancellationToken);
 274    }
 75    public virtual async Task<TResult?> FirstOrDefaultAsync<TResult>(Specification<T, TResult> specification, Cancellati
 76    {
 277        return await GenerateQuery(specification).FirstOrDefaultAsync(cancellationToken);
 278    }
 79    public virtual async Task<T?> SingleOrDefaultAsync(Specification<T> specification, CancellationToken cancellationTok
 80    {
 381        return await GenerateQuery(specification).SingleOrDefaultAsync(cancellationToken);
 282    }
 83    public virtual async Task<TResult?> SingleOrDefaultAsync<TResult>(Specification<T, TResult> specification, Cancellat
 84    {
 385        return await GenerateQuery(specification).SingleOrDefaultAsync(cancellationToken);
 286    }
 87    public virtual async Task<List<T>> ListAsync(CancellationToken cancellationToken = default)
 88    {
 189        return await _dbContext.Set<T>().ToListAsync(cancellationToken);
 190    }
 91    public virtual async Task<List<T>> ListAsync(Specification<T> specification, CancellationToken cancellationToken = d
 92    {
 193        return await GenerateQuery(specification).ToListAsync(cancellationToken);
 194    }
 95    public virtual async Task<List<TResult>> ListAsync<TResult>(Specification<T, TResult> specification, CancellationTok
 96    {
 197        return await GenerateQuery(specification).ToListAsync(cancellationToken);
 198    }
 99    public virtual async Task<int> CountAsync(CancellationToken cancellationToken = default)
 100    {
 2101        return await _dbContext.Set<T>().CountAsync(cancellationToken);
 2102    }
 103    public virtual async Task<int> CountAsync(Specification<T> specification, CancellationToken cancellationToken = defa
 104    {
 3105        return await GenerateQuery(specification, true).CountAsync(cancellationToken);
 3106    }
 107    public virtual async Task<int> CountAsync<TResult>(Specification<T, TResult> specification, CancellationToken cancel
 108    {
 2109        return await GenerateQuery(specification, true).CountAsync(cancellationToken);
 2110    }
 111    public virtual async Task<bool> AnyAsync(CancellationToken cancellationToken = default)
 112    {
 2113        return await _dbContext.Set<T>().AnyAsync(cancellationToken);
 2114    }
 115    public virtual async Task<bool> AnyAsync(Specification<T> specification, CancellationToken cancellationToken = defau
 116    {
 3117        return await GenerateQuery(specification, true).AnyAsync(cancellationToken);
 3118    }
 119    public virtual async Task<bool> AnyAsync<TResult>(Specification<T, TResult> specification, CancellationToken cancell
 120    {
 2121        return await GenerateQuery(specification, true).AnyAsync(cancellationToken);
 2122    }
 123
 124    public virtual IAsyncEnumerable<T> AsAsyncEnumerable(Specification<T> specification)
 125    {
 1126        return GenerateQuery(specification).AsAsyncEnumerable();
 127    }
 128
 129    protected virtual IQueryable<T> GenerateQuery(Specification<T> specification, bool ignorePaging = false)
 130    {
 22131        var query = _evaluator.Evaluate(_dbContext.Set<T>(), specification, ignorePaging);
 22132        return query;
 133    }
 134    protected virtual IQueryable<TResult> GenerateQuery<TResult>(Specification<T, TResult> specification, bool ignorePag
 135    {
 12136        var query = _evaluator.Evaluate(_dbContext.Set<T>(), specification, ignorePaging);
 12137        return query;
 138    }
 139}