Remove a resolver's query splitting when the projection loads no collection - #1422
Merged
Merged
Conversation
…ection A resolver can call AsSplitQuery for the collections a request might select. When the request selects none, the select projection loads no collection, so the split does nothing, and Verify.EntityFramework 16 throws for it. ApplyProjection now removes AsSplitQuery and AsSingleQuery in that case. With a collection selected, or when projection falls back to includes, the query is left alone.
Child ids are random guids and the children were ordered by id, so the snapshot matched only when the database returned them in the verified order.
SimonCropp
added a commit
that referenced
this pull request
Sep 28, 2026
…#1424) #1422 removed a resolver's AsSplitQuery only when the projection could be built as a select. When it cannot, as for a type with derived types, ApplyProjection falls back to includes and left the split in place, so a connection over such a type that selected no collection still threw under Verify.EntityFramework 16. The includes come from the same projection, so the check now runs before either path.
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.
A resolver can call
AsSplitQuery()for the collections a request might select. When the request selects none, the select projection loads no collection, so the split does nothing. Verify.EntityFramework 16 throws for that:For example, a connection field whose resolver is
Commitments.AsSplitQuery()...failed for any request that selected only scalars.ApplyProjectionnow checks whether the projection loads a collection at any depth, including derived-type navigations. If it doesn't,AsSplitQuery()andAsSingleQuery()are removed from the query (newQuerySplitting). The query is left alone when a collection is selected, and when projection falls back to includes, since a collection can then come from a resolverIncludeor anAutoInclude.Tests: a
splitParentEntitiesConnectionfield whose resolver callsAsSplitQuery().