Skip to content

Release v19.45.0

Choose a tag to compare

@github-actions github-actions released this 11 Oct 13:19
6b32f74

Fixes for model-bound child joins, reducers that never run, the projection editor's generated C#, and PDL that Workbench renders but cannot save.

Added

  • The PDL compiler adds a "did you mean" hint to a read model or property it cannot find, naming the registered read model whose title, short type name or casing matches, or the property whose casing differs (#4729)
  • The reducer analyzer reports public reducer-like methods that will never be dispatched, for example Reduce(TReadModel? current, object @event), through the existing CHR0006 and CHR0007 diagnostics. It recognizes the same method shapes as the runtime, including previous event generations marked [EventTypeGenerationFor<T>] (#4726)

Changed

  • A reducer with no dispatchable methods is no longer registered with the kernel. The client logs a warning naming the reducer and why each reducer-like method was skipped, and completion waits on that event sequence no longer time out waiting for it (#4726)

Fixed

  • A model-bound [Join<TEvent>] inside a [ChildrenFrom] collection without on: now joins on the child's identifying property, so join events that happened before the child was added are applied. If the child has no identifying property of its own, building the projection fails with MissingChildIdentityForJoin instead of silently missing those events (#4724)
  • The declarations Workbench shows for registered projections target the full read-model identifier, so they save back unchanged (#4729)
  • The projection editor's generated declarative and model-bound C# now compiles and expresses the same projection as the PDL: child joins without .On(), keyed removals, every blocks, child removals, nested objects, child and nested records with typed properties (DateTimeOffset, Guid, nullable types, collections), and self-referential read models. Where an attribute or builder cannot express a construct, the generated code says so in a comment instead of emitting different behavior (#4728)