[release/10.0] Fix change tracker not detecting changes in nested complex collections #37052
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.
Fixes #37026
Description
The change tracker fails to detect changes in complex collections that are nested inside non-collection complex properties. When an entity contains a non-collection complex property (e.g.,
NestedJson) which itself contains a complex collection (e.g.,Items), modifications to the nested collection are not detected byDetectChanges(), causingSaveChanges()to skip the UPDATE statement.Customer impact
When customers modify nested complex collections, their changes are silently ignored and not persisted to the database. This breaks the expected behavior where all tracked changes should be detected and saved and leads to data loss.
There is a workaround that allows marking the items as modified manually, but this is error-prone.
How found
Customer reported on 10.0.0-rc2
Regression
No, new feature
Testing
Test added
Risk
Low. Localized change that only affect the new complex collections feature.
Original prompt
💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.