Skip to content

v9.0.0

Choose a tag to compare

@fiseni fiseni released this 12 Mar 13:10
· 126 commits to main since this release
885782d

What's Changed

  • Update TFMs and reorganize solution. by @fiseni in #439
  • Revise EF Core dependencies per TFM. by @fiseni in #449
  • Refactor specification constructors as public. by @fiseni in #431
  • Remove IEntity contract. by @fiseni in #432
  • Reduce the size of specifications and avoid unnecessary memory allocations by @fiseni in #441
  • Fix InMemory SearchExtension bug by @fiseni in #391
  • Update and improve the builder infrastructure. by @fiseni in #442
  • Improve search validator and in-memory evaluator. by @fiseni in #443
  • Optimize the search EF evaluator. by @fiseni in #444
  • Optimize include evaluators. by @fiseni in #447
  • Simplify and minimize expression containers. by @fiseni in #448
  • Add TagWith and IgnoreAutoIncludes features. by @fiseni in #451
  • Add WithCacheKey extensions. by @fiseni in #452
  • 397 make fields and methods protected by @eldamir in #398
  • Update repository methods. by @fiseni in #450
  • Refactor the test suite by @fiseni in #437
  • Update GitHub workflows to use Linux hosts. by @fiseni in #440
  • Update Readme files. by @fiseni in #453
  • Add tests by @fiseni in #454
  • Prepare for publish, version 9.0.0 by @fiseni in #455

New Contributors

Full Changelog: v8.0...v9.0.0

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 a 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).