v3.1.1 → v4 Change Matrix
Every row below was verified against the source diff between the v3.1.1 release and
the current v4 implementation.
| Area | v3.1.1 | v4 | Change | Documentation |
|---|---|---|---|---|
| Configuration entry | DI-era registration | Static immutable FlexQueryCore.Configure() | Changed | Configuration |
| EF Core options | QueryExecutionOptions.UseNoTracking/UseSplitQuery | FlexQueryEfCoreOptions + EfCoreQueryOptions (bool? UseNoTracking); UseSplitQuery removed | Renamed / Changed | EF Core |
| Dapper options | DapperQueryOptions : BaseQueryOptions (Dialect, MappingRegistry public) | DapperQueryOptions : QueryGovernanceOptions (CommandTimeout, LoggerFactory); model config moves to FlexQueryDapper.Configure + ModelBuilder | Changed | Dapper |
| Dapper dialect | Manual ISqlDialectResolver | Auto-detection from DbConnection | Behavior changed | Dapper |
| Dapper mapping | MappingRegistry + public conventions | Convention-first ModelBuilder + IEntityTypeConfiguration<T> (conventions internal) | Replaced | Dapper |
| Typed DTO results | Not available | FlexQueryAsync<TEntity,TResponse> (4 overloads per provider) + CreateMap/ForMember/ForNavigation | Added | Typed DTO Projection |
| Filtered includes | FilteredIncludes / ApplyFilteredIncludes | expand trees with filter/sort/take (QueryOptions.Expand / ApplyExpand) | Replaced | Expand |
| Keyset pagination | Not available | useKeysetPagination, cursor, NextCursorToken, SeekAfter | Added | Keyset Pagination |
| Fluent API | FilterBuilder only | Query.Create() + FilterGroupBuilder grammar + sort/expand/aggregate builders | Changed | Fluent API |
| Sort model | SortNode (in SortOption.cs) | SortNode (in Paging/SortNode.cs) — type name unchanged | No API change | — |
| Select model | List<string> Select | List<SelectNode> (aliases + nested trees) | Changed | Projection |
| Aggregates | AggregateModel in select, string functions | Dedicated aggregate parameter, AggregateFunction enum, PascalCase aliases | Changed | Grouping & Aggregates |
| HAVING | Alias-integrity validation | HavingNode expression tree, declared-aggregate enforcement | Behavior changed | Grouping & Aggregates |
| DSL logic operators | Conditions joined with ,; symbolic & / | accepted | Conditions joined with & / | / AND / OR; a comma is now part of the value; ; in a filter is rejected | Behavior changed | Filtering |
| Query syntaxes | DSL, JSON, Indexed, Generic, JQL, MiniOData, AutoDetect | DSL, FQL, MiniOData | Removed | Query Syntax |
| FQL parser package | FlexQuery.NET.Parsers.Jql, QuerySyntax.Jql | FlexQuery.NET.Parsers.Fql, QuerySyntax.Fql | Renamed | Query Syntax |
| Parser registration | DI services (ServiceCollectionExtensions, MiniODataFeature) | Static Fql.Register() / MiniOData.Register() | Changed | Query Syntax |
| Validation | Rule pipeline (QueryValidator rules) | Same pipeline extended — expand/HAVING/grouping/keyset rules + ValidationResult/ValidationError model | Extended | Validation |
| Field exceptions | InvalidFilterFieldException / InvalidSortFieldException | Unified hierarchy under FlexQueryException | Replaced | Validation |
| Case-insensitive filtering | CaseInsensitive / CaseInsensitiveFields = true | Removed | Removed | Migration |
| Governance sets | On monolithic BaseQueryOptions | Same members on QueryGovernanceOptions (class split) | Changed | Security |
[FieldAccess] | Allowed/Blocked/Filterable/Sortable/Selectable/Groupable/Aggregatable | + AllowedIncludes; class sealed | Changed | ASP.NET Core |
| ASP.NET Core DI | v3-era ServiceCollectionExtensions + QueryableAspNetCoreExtensions | AddFlexQuerySecurity, AddFlexQueryJson, AddFlexQuery (global config) | Changed | ASP.NET Core |
| OpenAPI | Not available | FlexQuery.NET.OpenApi (AddFlexQueryOpenApi, AddFlexQuery) | Added | OpenAPI |
| Diagnostics listener | Models.IFlexQueryExecutionListener (ValueTask ×4) | Execution.IFlexQueryExecutionListener — members unchanged | Namespace move | Diagnostics |
| Debug output | DebugResult | QueryDebugInfo via ToFlexQueryDebug | Replaced | Diagnostics |
| Result model | QueryResult<T> base members | + NextCursorToken, ResultShape | Added | Query Result |
| Paging validation | Loose | Malformed page/pageSize/distinct throw; out-of-range clamps 1–1000 | Behavior changed | Paging |
| Global options | Mutable | Immutable after first call | Behavior changed | Configuration |
| Cancellation | Not available | CancellationToken across async overloads | Added | EF Core, Dapper |
| Adapter JSON entry | FromAgGridJson(string) / FromKendoJson(string) | JsonElement.ToQueryOptions(); parser/converter classes removed | Changed | AG Grid, Kendo |
| Target frameworks | net6.0/net7.0/net8.0 era | net6.0/net8.0/net10.0 (OpenApi: net9.0/net10.0) | Changed | Installation |