Releases: EFNext/ExpressiveSharp
v0.8.0
New features
- virtual/abstract/override [Expressive] members are now allowed. They expand using the static (declared) type of the receiver, so an overridden body is not used by query providers (EF Core, MongoDB). The new EXP0024 warning flags these and suggests workarounds (test the runtime type with a switch, or move the logic into a non-virtual static/extension method). (#66)
- New analyzer EXP0029 (Info) — flags where an IExpressiveQueryable chain is silently dropped back to a plain IQueryable, losing [Expressive] expansion downstream. Includes a code fix. (#69)
Bug fixes
- Average window function over nullable int?/long? now casts to floating point — no more integer-divided results (e.g. 1 instead of 1.5). (#67)
- UnionBy interceptor stub had its second parameter mistyped as IEnumerable instead of IEnumerable, breaking interception. (#68)
- Nested-lambda variable collision in multi-lambda interceptors (Join/GroupJoin) emitted duplicate locals → CS0128. Parameter names are now per-lambda prefixed. (#70)
- Stale incremental cache on cross-file edits in ExpressiveGenerator, plus a separate cache-busting fix in PolyfillInterceptorGenerator. (#71, #73)
- EF Core async terminals (ToListAsync/ToArrayAsync/etc.) now work directly on Include/ThenInclude chains and AsExpressiveDbSet() sets, without tripping the .NET 10 IAsyncEnumerable ambiguity. (#72)
Breaking changes
- Diagnostic IDs were renumbered into a contiguous EXP0001–EXP0024 range. EXP0001–EXP0012 are unchanged; the [ExpressiveFor], [ExpressiveProperty], and "unsupported operation ignored" codes all shifted down. If you reference or suppress any of these in .editorconfig, , or #pragma, update them against docs/reference/diagnostics.md. (#69)
- Virtual [Expressive] members now emit EXP0024. With TreatWarningsAsErrors, members that were previously silently ignored will now fail the build until resolved or suppressed. (#66)
Full Changelog: v0.7.3...v0.8.0
v0.7.3
v0.7.2
v0.7.1
v0.7.0
This particular release adds OpenTelemetry (Meter/ActivitySource) as well as an EventSource for debugging issues (docs provided). I intend for this library to be feature complete at this point and ready for a proper V1 release
What's Changed
- Various documentation tweaks by @koenbeuk in #55
- Stabilize RelationalExtensions by @koenbeuk in #56
- Add hot reload support for EF Core and MongoDB integrations by @koenbeuk in #58
- Add telemetry support for diagnostics by @koenbeuk in #57
Full Changelog: v0.6.5...v0.7.0
v0.6.5
v0.6.4
v0.6.3
v0.6.2
v0.6.1
v0.6.1
Bug fixes
-
[ExpressiveProperty]stubs can now reference each other (#44, #45). Previously, defining one synthesized property in terms of another emittedEXP0008and produced uncompilable generated code:public partial class Person { [ExpressiveProperty("FirstName")] private string FirstNameExpr => "Jane"; [ExpressiveProperty("FullName")] private string FullNameExpr => FirstName + " Doe"; // referenced FirstName — broke }
The generator now feeds its own synthesized partials back into the binding compilation, so
[Expressive]and[ExpressiveProperty]members can resolve sibling synthesized properties exactly like hand-written ones.
Performance
- Generator: hoist
AugmentCompilationto a single per-run step. The augmented compilation used for binding synthesized partials is now computed once and threaded through all three downstream pipelines, instead of being rebuilt per[Expressive]member. Removes O(#expressives × #synthesized) work on larger projects.
Housekeeping
- Trimmed verbose XML doc summaries, redundant section-header banners, and inline commentary across the codebase. No behavioral changes — generator output, runtime semantics, and tests are unaffected.
- Codecov PR comments now show change requirements with a tighter layout; benchmarks workflow no longer runs on
pull_request.
Upgrading
Drop-in replacement for v0.6.0. No code changes required.
Full Changelog: v0.6.0...v0.6.1