diff --git a/Specification.EntityFrameworkCore/src/Ardalis.Specification.EntityFrameworkCore/ContextFactoryRepositoryBaseOfT.cs b/Specification.EntityFrameworkCore/src/Ardalis.Specification.EntityFrameworkCore/ContextFactoryRepositoryBaseOfT.cs index 0c49360..a7d3ee7 100644 --- a/Specification.EntityFrameworkCore/src/Ardalis.Specification.EntityFrameworkCore/ContextFactoryRepositoryBaseOfT.cs +++ b/Specification.EntityFrameworkCore/src/Ardalis.Specification.EntityFrameworkCore/ContextFactoryRepositoryBaseOfT.cs @@ -2,25 +2,19 @@ namespace Ardalis.Specification.EntityFrameworkCore; -public abstract class ContextFactoryRepositoryBaseOfT : IRepositoryBase +public abstract class ContextFactoryRepositoryBaseOfT(IDbContextFactory dbContextFactory, + ISpecificationEvaluator specificationEvaluator) : IRepositoryBase where TEntity : class where TContext : DbContext { - private readonly IDbContextFactory _dbContextFactory; - private readonly ISpecificationEvaluator _specificationEvaluator; + private readonly IDbContextFactory _dbContextFactory = dbContextFactory; + private readonly ISpecificationEvaluator _specificationEvaluator = specificationEvaluator; public ContextFactoryRepositoryBaseOfT(IDbContextFactory dbContextFactory) : this(dbContextFactory, SpecificationEvaluator.Default) { - } - - public ContextFactoryRepositoryBaseOfT(IDbContextFactory dbContextFactory, - ISpecificationEvaluator specificationEvaluator) - { - _dbContextFactory = dbContextFactory; - _specificationEvaluator = specificationEvaluator; - } - + } + /// public async Task GetByIdAsync(TId id, CancellationToken cancellationToken = default) where TId : notnull { @@ -205,10 +199,8 @@ public Task SaveChangesAsync(CancellationToken cancellationToken = default) throw new InvalidOperationException(); } - public async Task SaveChangesAsync(TContext dbContext, CancellationToken cancellationToken = default) - { - return await dbContext.SaveChangesAsync(cancellationToken); - } + public async Task SaveChangesAsync(TContext dbContext, CancellationToken cancellationToken = default) + => await dbContext.SaveChangesAsync(cancellationToken); /// /// Filters the entities of , to those that match the encapsulated query logic of the @@ -216,10 +208,8 @@ public async Task SaveChangesAsync(TContext dbContext, CancellationToken ca /// /// The encapsulated query logic. /// The filtered entities as an . - protected virtual IQueryable ApplySpecification(ISpecification specification, TContext dbContext, bool evaluateCriteriaOnly = false) - { - return _specificationEvaluator.GetQuery(dbContext.Set().AsQueryable(), specification, evaluateCriteriaOnly); - } + protected virtual IQueryable ApplySpecification(ISpecification specification, TContext dbContext, bool evaluateCriteriaOnly = false) + => _specificationEvaluator.GetQuery(dbContext.Set().AsQueryable(), specification, evaluateCriteriaOnly); /// /// Filters all entities of , that matches the encapsulated query logic of the @@ -231,8 +221,6 @@ protected virtual IQueryable ApplySpecification(ISpecification /// The type of the value returned by the projection. /// The encapsulated query logic. /// The filtered projected entities as an . - protected virtual IQueryable ApplySpecification(ISpecification specification, TContext dbContext) - { - return _specificationEvaluator.GetQuery(dbContext.Set().AsQueryable(), specification); - } + protected virtual IQueryable ApplySpecification(ISpecification specification, TContext dbContext) + => _specificationEvaluator.GetQuery(dbContext.Set().AsQueryable(), specification); } diff --git a/Specification.EntityFrameworkCore/src/Ardalis.Specification.EntityFrameworkCore/EFRepositoryFactory.cs b/Specification.EntityFrameworkCore/src/Ardalis.Specification.EntityFrameworkCore/EFRepositoryFactory.cs index 3e21e64..4b0c15e 100644 --- a/Specification.EntityFrameworkCore/src/Ardalis.Specification.EntityFrameworkCore/EFRepositoryFactory.cs +++ b/Specification.EntityFrameworkCore/src/Ardalis.Specification.EntityFrameworkCore/EFRepositoryFactory.cs @@ -10,20 +10,16 @@ namespace Ardalis.Specification.EntityFrameworkCore; /// The Concrete implementation of the repository interface to create /// /// The DbContext derived class to support the concrete repository -public class EFRepositoryFactory : IRepositoryFactory +/// +/// Initialises a new instance of the EFRepositoryFactory +/// +/// The IDbContextFactory to use to generate the TContext +public class EFRepositoryFactory( + IDbContextFactory dbContextFactory) : IRepositoryFactory where TConcreteRepository : TRepository where TContext : DbContext { - private readonly IDbContextFactory _dbContextFactory; - - /// - /// Initialises a new instance of the EFRepositoryFactory - /// - /// The IDbContextFactory to use to generate the TContext - public EFRepositoryFactory(IDbContextFactory dbContextFactory) - { - _dbContextFactory = dbContextFactory; - } + private readonly IDbContextFactory _dbContextFactory = dbContextFactory; /// public TRepository CreateRepository() diff --git a/Specification.EntityFrameworkCore/src/Ardalis.Specification.EntityFrameworkCore/RepositoryBaseOfT.cs b/Specification.EntityFrameworkCore/src/Ardalis.Specification.EntityFrameworkCore/RepositoryBaseOfT.cs index e9118d4..7a63093 100644 --- a/Specification.EntityFrameworkCore/src/Ardalis.Specification.EntityFrameworkCore/RepositoryBaseOfT.cs +++ b/Specification.EntityFrameworkCore/src/Ardalis.Specification.EntityFrameworkCore/RepositoryBaseOfT.cs @@ -3,23 +3,19 @@ namespace Ardalis.Specification.EntityFrameworkCore; /// -public abstract class RepositoryBase : IRepositoryBase where T : class +/// +public abstract class RepositoryBase( + DbContext dbContext, + ISpecificationEvaluator specificationEvaluator) : IRepositoryBase where T : class { - protected DbContext DbContext { get; set; } - protected ISpecificationEvaluator SpecificationEvaluator { get; set; } + protected DbContext DbContext { get; set; } = dbContext; + protected ISpecificationEvaluator SpecificationEvaluator { get; set; } = specificationEvaluator; public RepositoryBase(DbContext dbContext) : this(dbContext, EntityFrameworkCore.SpecificationEvaluator.Default) { } - /// - public RepositoryBase(DbContext dbContext, ISpecificationEvaluator specificationEvaluator) - { - DbContext = dbContext; - SpecificationEvaluator = specificationEvaluator; - } - /// public virtual async Task AddAsync(T entity, CancellationToken cancellationToken = default) { @@ -82,60 +78,42 @@ public virtual async Task DeleteRangeAsync(ISpecification specification, Canc } /// - public virtual async Task SaveChangesAsync(CancellationToken cancellationToken = default) - { - return await DbContext.SaveChangesAsync(cancellationToken); - } + public virtual async Task SaveChangesAsync(CancellationToken cancellationToken = default) + => await DbContext.SaveChangesAsync(cancellationToken); /// - public virtual async Task GetByIdAsync(TId id, CancellationToken cancellationToken = default) where TId : notnull - { - return await DbContext.Set().FindAsync(new object[] { id }, cancellationToken: cancellationToken); - } + public virtual async Task GetByIdAsync(TId id, CancellationToken cancellationToken = default) where TId : notnull + => await DbContext.Set().FindAsync(new object[] { id }, cancellationToken: cancellationToken); /// [Obsolete("Use FirstOrDefaultAsync or SingleOrDefaultAsync instead. The SingleOrDefaultAsync can be applied only to SingleResultSpecification specifications.")] - public virtual async Task GetBySpecAsync(ISpecification specification, CancellationToken cancellationToken = default) - { - return await ApplySpecification(specification).FirstOrDefaultAsync(cancellationToken); - } + public virtual async Task GetBySpecAsync(ISpecification specification, CancellationToken cancellationToken = default) + => await ApplySpecification(specification).FirstOrDefaultAsync(cancellationToken); /// [Obsolete("Use FirstOrDefaultAsync or SingleOrDefaultAsync instead. The SingleOrDefaultAsync can be applied only to SingleResultSpecification specifications.")] - public virtual async Task GetBySpecAsync(ISpecification specification, CancellationToken cancellationToken = default) - { - return await ApplySpecification(specification).FirstOrDefaultAsync(cancellationToken); - } + public virtual async Task GetBySpecAsync(ISpecification specification, CancellationToken cancellationToken = default) + => await ApplySpecification(specification).FirstOrDefaultAsync(cancellationToken); /// public virtual async Task FirstOrDefaultAsync(ISpecification specification, CancellationToken cancellationToken = default) - { - return await ApplySpecification(specification).FirstOrDefaultAsync(cancellationToken); - } + => await ApplySpecification(specification).FirstOrDefaultAsync(cancellationToken); /// - public virtual async Task FirstOrDefaultAsync(ISpecification specification, CancellationToken cancellationToken = default) - { - return await ApplySpecification(specification).FirstOrDefaultAsync(cancellationToken); - } + public virtual async Task FirstOrDefaultAsync(ISpecification specification, CancellationToken cancellationToken = default) + => await ApplySpecification(specification).FirstOrDefaultAsync(cancellationToken); /// - public virtual async Task SingleOrDefaultAsync(ISingleResultSpecification specification, CancellationToken cancellationToken = default) - { - return await ApplySpecification(specification).SingleOrDefaultAsync(cancellationToken); - } + public virtual async Task SingleOrDefaultAsync(ISingleResultSpecification specification, CancellationToken cancellationToken = default) + => await ApplySpecification(specification).SingleOrDefaultAsync(cancellationToken); /// - public virtual async Task SingleOrDefaultAsync(ISingleResultSpecification specification, CancellationToken cancellationToken = default) - { - return await ApplySpecification(specification).SingleOrDefaultAsync(cancellationToken); - } + public virtual async Task SingleOrDefaultAsync(ISingleResultSpecification specification, CancellationToken cancellationToken = default) + => await ApplySpecification(specification).SingleOrDefaultAsync(cancellationToken); /// public virtual async Task> ListAsync(CancellationToken cancellationToken = default) - { - return await DbContext.Set().ToListAsync(cancellationToken); - } + => await DbContext.Set().ToListAsync(cancellationToken); /// public virtual async Task> ListAsync(ISpecification specification, CancellationToken cancellationToken = default) @@ -154,34 +132,24 @@ public virtual async Task> ListAsync(ISpecification - public virtual async Task CountAsync(ISpecification specification, CancellationToken cancellationToken = default) - { - return await ApplySpecification(specification, true).CountAsync(cancellationToken); - } + public virtual async Task CountAsync(ISpecification specification, CancellationToken cancellationToken = default) + => await ApplySpecification(specification, true).CountAsync(cancellationToken); /// - public virtual async Task CountAsync(CancellationToken cancellationToken = default) - { - return await DbContext.Set().CountAsync(cancellationToken); - } + public virtual async Task CountAsync(CancellationToken cancellationToken = default) + => await DbContext.Set().CountAsync(cancellationToken); /// - public virtual async Task AnyAsync(ISpecification specification, CancellationToken cancellationToken = default) - { - return await ApplySpecification(specification, true).AnyAsync(cancellationToken); - } + public virtual async Task AnyAsync(ISpecification specification, CancellationToken cancellationToken = default) + => await ApplySpecification(specification, true).AnyAsync(cancellationToken); /// public virtual async Task AnyAsync(CancellationToken cancellationToken = default) - { - return await DbContext.Set().AnyAsync(cancellationToken); - } + => await DbContext.Set().AnyAsync(cancellationToken); /// public virtual IAsyncEnumerable AsAsyncEnumerable(ISpecification specification) - { - return ApplySpecification(specification).AsAsyncEnumerable(); - } + => ApplySpecification(specification).AsAsyncEnumerable(); /// /// Filters the entities of , to those that match the encapsulated query logic of the @@ -189,10 +157,8 @@ public virtual IAsyncEnumerable AsAsyncEnumerable(ISpecification specifica /// /// The encapsulated query logic. /// The filtered entities as an . - protected virtual IQueryable ApplySpecification(ISpecification specification, bool evaluateCriteriaOnly = false) - { - return SpecificationEvaluator.GetQuery(DbContext.Set().AsQueryable(), specification, evaluateCriteriaOnly); - } + protected virtual IQueryable ApplySpecification(ISpecification specification, bool evaluateCriteriaOnly = false) + => SpecificationEvaluator.GetQuery(DbContext.Set().AsQueryable(), specification, evaluateCriteriaOnly); /// /// Filters all entities of , that matches the encapsulated query logic of the @@ -204,8 +170,6 @@ protected virtual IQueryable ApplySpecification(ISpecification specificati /// The type of the value returned by the projection. /// The encapsulated query logic. /// The filtered projected entities as an . - protected virtual IQueryable ApplySpecification(ISpecification specification) - { - return SpecificationEvaluator.GetQuery(DbContext.Set().AsQueryable(), specification); - } + protected virtual IQueryable ApplySpecification(ISpecification specification) + => SpecificationEvaluator.GetQuery(DbContext.Set().AsQueryable(), specification); } diff --git a/Specification.EntityFrameworkCore/tests/Ardalis.Specification.EntityFrameworkCore.IntegrationTests/Fixture/RepositoryOfT.cs b/Specification.EntityFrameworkCore/tests/Ardalis.Specification.EntityFrameworkCore.IntegrationTests/Fixture/RepositoryOfT.cs index 6c81b2a..1080499 100644 --- a/Specification.EntityFrameworkCore/tests/Ardalis.Specification.EntityFrameworkCore.IntegrationTests/Fixture/RepositoryOfT.cs +++ b/Specification.EntityFrameworkCore/tests/Ardalis.Specification.EntityFrameworkCore.IntegrationTests/Fixture/RepositoryOfT.cs @@ -1,16 +1,12 @@ namespace Ardalis.Specification.EntityFrameworkCore.IntegrationTests.Fixture; /// -public class Repository : RepositoryBase where T : class +public class Repository(TestDbContext dbContext, + ISpecificationEvaluator specificationEvaluator) : RepositoryBase(dbContext, specificationEvaluator), RepositoryBase where T : class { - protected readonly TestDbContext dbContext; + protected readonly TestDbContext dbContext = dbContext; public Repository(TestDbContext dbContext) : this(dbContext, EntityFrameworkCore.SpecificationEvaluator.Default) { } - - public Repository(TestDbContext dbContext, ISpecificationEvaluator specificationEvaluator) : base(dbContext, specificationEvaluator) - { - this.dbContext = dbContext; - } } diff --git a/Specification/src/Ardalis.Specification/Builder/CacheSpecificationBuilder.cs b/Specification/src/Ardalis.Specification/Builder/CacheSpecificationBuilder.cs index c5691ec..278cb91 100644 --- a/Specification/src/Ardalis.Specification/Builder/CacheSpecificationBuilder.cs +++ b/Specification/src/Ardalis.Specification/Builder/CacheSpecificationBuilder.cs @@ -1,18 +1,14 @@ namespace Ardalis.Specification; -public class CacheSpecificationBuilder : ICacheSpecificationBuilder where T : class +public class CacheSpecificationBuilder( + Specification specification, + bool isChainDiscarded) : ICacheSpecificationBuilder where T : class { - public Specification Specification { get; } - public bool IsChainDiscarded { get; set; } + public Specification Specification { get; } = specification; + public bool IsChainDiscarded { get; set; } = isChainDiscarded; public CacheSpecificationBuilder(Specification specification) : this(specification, false) { } - - public CacheSpecificationBuilder(Specification specification, bool isChainDiscarded) - { - Specification = specification; - IsChainDiscarded = isChainDiscarded; - } } diff --git a/Specification/src/Ardalis.Specification/Builder/IncludableSpecificationBuilder.cs b/Specification/src/Ardalis.Specification/Builder/IncludableSpecificationBuilder.cs index f1686f5..1fdf6cc 100644 --- a/Specification/src/Ardalis.Specification/Builder/IncludableSpecificationBuilder.cs +++ b/Specification/src/Ardalis.Specification/Builder/IncludableSpecificationBuilder.cs @@ -1,18 +1,14 @@ namespace Ardalis.Specification; -public class IncludableSpecificationBuilder : IIncludableSpecificationBuilder where T : class +public class IncludableSpecificationBuilder( + Specification specification, + bool isChainDiscarded) : IIncludableSpecificationBuilder where T : class { - public Specification Specification { get; } - public bool IsChainDiscarded { get; set; } + public Specification Specification { get; } = specification; + public bool IsChainDiscarded { get; set; } = isChainDiscarded; public IncludableSpecificationBuilder(Specification specification) : this(specification, false) { } - - public IncludableSpecificationBuilder(Specification specification, bool isChainDiscarded) - { - Specification = specification; - IsChainDiscarded = isChainDiscarded; - } } diff --git a/Specification/src/Ardalis.Specification/Builder/OrderedSpecificationBuilder.cs b/Specification/src/Ardalis.Specification/Builder/OrderedSpecificationBuilder.cs index 7a31903..2ceea20 100644 --- a/Specification/src/Ardalis.Specification/Builder/OrderedSpecificationBuilder.cs +++ b/Specification/src/Ardalis.Specification/Builder/OrderedSpecificationBuilder.cs @@ -1,18 +1,14 @@ namespace Ardalis.Specification; -public class OrderedSpecificationBuilder : IOrderedSpecificationBuilder +public class OrderedSpecificationBuilder( + Specification specification, + bool isChainDiscarded) : IOrderedSpecificationBuilder { - public Specification Specification { get; } - public bool IsChainDiscarded { get; set; } + public Specification Specification { get; } = specification; + public bool IsChainDiscarded { get; set; } = isChainDiscarded; public OrderedSpecificationBuilder(Specification specification) : this(specification, false) { } - - public OrderedSpecificationBuilder(Specification specification, bool isChainDiscarded) - { - Specification = specification; - IsChainDiscarded = isChainDiscarded; - } } diff --git a/Specification/src/Ardalis.Specification/Builder/SpecificationBuilder.cs b/Specification/src/Ardalis.Specification/Builder/SpecificationBuilder.cs index b23eed0..d460de0 100644 --- a/Specification/src/Ardalis.Specification/Builder/SpecificationBuilder.cs +++ b/Specification/src/Ardalis.Specification/Builder/SpecificationBuilder.cs @@ -1,22 +1,11 @@ namespace Ardalis.Specification; -public class SpecificationBuilder : SpecificationBuilder, ISpecificationBuilder +public class SpecificationBuilder(Specification specification) : SpecificationBuilder(specification), ISpecificationBuilder { - public new Specification Specification { get; } - - public SpecificationBuilder(Specification specification) - : base(specification) - { - Specification = specification; - } + public new Specification Specification { get; } = specification; } -public class SpecificationBuilder : ISpecificationBuilder +public class SpecificationBuilder(Specification specification) : ISpecificationBuilder { - public Specification Specification { get; } - - public SpecificationBuilder(Specification specification) - { - Specification = specification; - } + public Specification Specification { get; } = specification; } diff --git a/Specification/src/Ardalis.Specification/IncludeTypeEnum.cs b/Specification/src/Ardalis.Specification/IncludeTypeEnum.cs index 83176da..54bd40b 100644 --- a/Specification/src/Ardalis.Specification/IncludeTypeEnum.cs +++ b/Specification/src/Ardalis.Specification/IncludeTypeEnum.cs @@ -3,5 +3,5 @@ public enum IncludeTypeEnum { Include = 1, - ThenInclude = 2 + ThenInclude } diff --git a/Specification/src/Ardalis.Specification/OrderTypeEnum.cs b/Specification/src/Ardalis.Specification/OrderTypeEnum.cs index 0291805..85f781b 100644 --- a/Specification/src/Ardalis.Specification/OrderTypeEnum.cs +++ b/Specification/src/Ardalis.Specification/OrderTypeEnum.cs @@ -6,7 +6,7 @@ public enum OrderTypeEnum { OrderBy = 1, - OrderByDescending = 2, - ThenBy = 3, - ThenByDescending = 4 + OrderByDescending , + ThenBy , + ThenByDescending } diff --git a/Specification/src/Ardalis.Specification/Specification.cs b/Specification/src/Ardalis.Specification/Specification.cs index 7f0c42e..527e032 100644 --- a/Specification/src/Ardalis.Specification/Specification.cs +++ b/Specification/src/Ardalis.Specification/Specification.cs @@ -15,15 +15,9 @@ protected Specification() } protected Specification(IInMemorySpecificationEvaluator inMemorySpecificationEvaluator) - : base(inMemorySpecificationEvaluator) - { - Query = new SpecificationBuilder(this); - } + : base(inMemorySpecificationEvaluator) => Query = new SpecificationBuilder(this); - public new virtual IEnumerable Evaluate(IEnumerable entities) - { - return Evaluator.Evaluate(entities, this); - } + public new virtual IEnumerable Evaluate(IEnumerable entities) => Evaluator.Evaluate(entities, this); /// public Expression>? Selector { get; internal set; } @@ -65,16 +59,10 @@ protected Specification(IInMemorySpecificationEvaluator inMemorySpecificationEva } /// - public virtual IEnumerable Evaluate(IEnumerable entities) - { - return Evaluator.Evaluate(entities, this); - } + public virtual IEnumerable Evaluate(IEnumerable entities) => Evaluator.Evaluate(entities, this); /// - public virtual bool IsSatisfiedBy(T entity) - { - return Validator.IsValid(entity, this); - } + public virtual bool IsSatisfiedBy(T entity) => Validator.IsValid(entity, this); /// public IDictionary Items { get; set; } = new Dictionary(); diff --git a/Specification/src/Ardalis.Specification/Validators/SpecificationValidator.cs b/Specification/src/Ardalis.Specification/Validators/SpecificationValidator.cs index b2ff6a2..cf24120 100644 --- a/Specification/src/Ardalis.Specification/Validators/SpecificationValidator.cs +++ b/Specification/src/Ardalis.Specification/Validators/SpecificationValidator.cs @@ -17,10 +17,7 @@ public SpecificationValidator() SearchValidator.Instance }); } - public SpecificationValidator(IEnumerable validators) - { - _validators.AddRange(validators); - } + public SpecificationValidator(IEnumerable validators) => _validators.AddRange(validators); public virtual bool IsValid(T entity, ISpecification specification) {