Skip to content

Version 9 - Epic #427

@fiseni

Description

@fiseni

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

Community requests:

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 return Enumerable.Empty<T> if empty.
  • The default value for Take and Skip properties no longer is null. They're updated to non nullable int type with a default value of -1.
  • The specification constructors no longer accept IInMemorySpecificationEvaluator and ISpecificationValidator 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> and ISpecificationBuilder<T, TResult> builders.
  • The OrderedSpecificationBuilder and CacheSpecificationBuilder are removed.
  • The in-memory SearchEvaluator is renamed to SearchMemoryEvaluator.
  • The IncludeEvaluator.Default and IncludeEvaluator.Cached singleton instances are removed. Instead, use the IncludeEvaluator.Instance.
  • The SpecificationEvaluator no longer accepts bool cacheEnabled parameter. The caching is applied by default wherever necessary.
  • The EntityType, PropertyType, and PreviousPropertyType are removed from IncludeExpressionInfo.
  • The Update and Delete repository methods return Task<int> (the affected rows).

Version 9.0.1


Version 9.1.0

Breaking Changes

The PreviousPropertyType is re-added to IncludeExpressionInfo. The constructors of IncludeExpressionInfo are modified.


Version 9.2.0


Metadata

Metadata

Assignees

Labels

No labels
No labels

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions