-
Notifications
You must be signed in to change notification settings - Fork 251
Description
This issue will act as an Epic and lists all planned changes for version 9. I'll keep updating the list as we work toward the new version.
Version 9 will focus on performance improvement, specifically reducing allocations and the memory footprint of using specifications. We'll try to avoid breaking changes for the public API surface, but the internals will be refactored. Folks who have been relying on the internals or have custom extensions might be affected by these changes.
Version 9.0.0
- Update TFMs #438
- Update Specification constructors as public. #413
- Remove IEntity #414
- Reduce the Specification size. Set the initial state to null. #415
- Refactor Take/Skip state to non-nullable int. Define the default value to -1. #416
- Remove the Evaluator and Validator state from Specifications. #417
- Remove the state for the Query builder. Update it as a calculated property. #418
- Improve the specification builders. Select/SelectMany should be applied in the end. #419
- Add IsChainDiscarded thread-static field. #420
- Improve the C# implementation of the Like operator. #421
- Improve the Search in-memory evaluator. Implement a custom iterator and reduce allocations. #422
- Refactor Search validator to allocation-free implementation. #424
- Improve the Search EF evaluator. Reduce allocations. #423
- Refactor Include evaluator. Implement caching. #425
- Update expression constructs. Reduce size. #426
- Remove obsolete API #346
- Add Readme file in the NuGet package #385
Community requests:
- Add TagWith feature #428
- Add EF IgnoreAutoIncludes support #436
- Fix EnableCache to not append a dash if you pass in no args #412
- Why do the Update and Delete not returning anything? #361
Breaking Changes
The "standard" use of the library remains fairly intact.
- The obsolete
GetBySpec
repository methods are removed. - The
IEntity
interface is removed. - The
Select
/SelectMany
are applied at the end of the chain or in a separate Query clause. These extension methods return void and no further chaining is possible.
In this version, we refactored the internals and the building blocks significantly. The "advanced" use cases are affected by these changes. Users who have custom extensions or have been relying on the internals need to migrate accordingly.
- The expression collections no longer are initialized to a new
List<T>
by default and will returnEnumerable.Empty<T>
if empty. - The default value for
Take
andSkip
properties no longer isnull
. They're updated to non nullableint
type with a default value of-1
. - The specification constructors no longer accept
IInMemorySpecificationEvaluator
andISpecificationValidator
parameters. The properties are still defined as virtual and can be overridden. - The builder infrastructure is refactored to accommodate better flow for specs with projections. All extensions should be written for both
ISpecificationBuilder<T>
andISpecificationBuilder<T, TResult>
builders. - The
OrderedSpecificationBuilder
andCacheSpecificationBuilder
are removed. - The in-memory
SearchEvaluator
is renamed toSearchMemoryEvaluator
. - The
IncludeEvaluator.Default
andIncludeEvaluator.Cached
singleton instances are removed. Instead, use theIncludeEvaluator.Instance
. - The
SpecificationEvaluator
no longer acceptsbool cacheEnabled
parameter. The caching is applied by default wherever necessary. - The
EntityType
,PropertyType
, andPreviousPropertyType
are removed fromIncludeExpressionInfo
. - The
Update
andDelete
repository methods returnTask<int>
(the affected rows).
Version 9.0.1
- Re-add the inheritance in the builders Add converter from ISpecificationBuilder<T, TResult> to ISpecificationBuilder<T> #456
Version 9.1.0
- Add WithProjectionOf feature Allow combination of Specification with different projections #389
- Fix type inference for ThenInclude with casting InvalidCastException when using ThenInclude on IReadOnlyCollection #463
Breaking Changes
The PreviousPropertyType
is re-added to IncludeExpressionInfo
. The constructors of IncludeExpressionInfo
are modified.
Version 9.2.0
- Add support for multiple TagWith multiple TagWith support? #468