Release 5.3.0 - #30
Merged
Merged
Conversation
A snapshot persists a converted property as its provider type on a property-bag type and drops the converter, so the member check that guards `x.CreatedAt.Year` had nothing to check against. The first `migrations add` passed because the snapshot did not hold the path yet; every diff whose source was the resulting snapshot then threw `Could not resolve property path 'Email.Value'` — the next `migrations add`, `has-pending-model-changes`, and the pending-changes check `Migrate()` runs before applying anything. On a property-bag type, an indexer property with no converter now resolves as the persisted scalar. Entity and complex types in a snapshot are both property bags, so one fallback covers expression templates, column parts, composite parts, filter placeholders and exclusion elements, at the top level and nested. SnapshotRoundTripTests declares every one of those forms and diffs the compiled snapshot against the live model with both the harness differ and the runtime differ AddNpgsqlComplexIndexes() registers. Also: AGENTS.md pointing agents at CLAUDE.md, and consumer names removed from the changelog and test comments. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Filters_are_amended_idempotently reads a counter its context increments in OnModelCreating. Contexts built with equal options share an internal service provider and its model cache, and EF builds the runtime model from an already-cached design-time model without running OnModelCreating again. The sibling test builds this context's design-time model through the harness, so under method-level parallelism whichever ran first decided whether the counter was 4 or 0. Reproduced by forcing that order; EnableServiceProviderCaching(false) gives the test an empty cache. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Only one test uses this context today, so it does not race yet; it is the same shape as MutableApiTests and one sibling test away from it. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
One fix, plus the release bump.
x => x.Email.Value) now resolves against a model snapshot as well as the configured model. The snapshot persists the property as its provider type on a property-bag type and drops the converter, so the firstdotnet ef migrations addsucceeded and everything that diffed the resulting snapshot — the nextmigrations add,has-pending-model-changes,Migrate()'s pending-model-changes check — threwCould not resolve property path 'Email.Value'. On a property-bag type the persisted scalar is accepted for a path the configured model already validated; against a configured model the provider-type check is unchanged.AGENTS.mdpointing non-Claude agents atCLAUDE.md; consumer names removed from the changelog and three test comments.Verification
SnapshotRoundTripTestsgained a context declaring every converter-member form (expression template, column part, composite part, filter placeholder, exclusion element; top level and inside a complex type). One test diffs the compiled snapshot against the live model with the harness differ, the other with the runtime differAddNpgsqlComplexIndexes()registers, viaHasDifferences.🤖 Generated with Claude Code