mcpField
C
change-tracking

change-tracking

github.com/dotnetDevelopment14.8k48 installsUpdated today
Repository

About change-tracking

A development skill covering EF Core’s change-tracking internals, including entity states, snapshots, change detection, and identity maps. It supports work on state transitions and graph replacement behavior, with testing guidance for unit and functional tests.

Key features

  1. 01Tracked entity and state management
  2. 02Snapshot and notification change detection
  3. 03Identity maps and shared-identity replacement
  4. 04Compiled property accessors
  5. 05Unit and graph-update testing guidance

Use cases

  1. 01Debugging unexpected entity state transitions
  2. 02Testing snapshot-based change detection
  3. 03Validating replacement graphs with shared identities

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/dotnet/efcore --skill change-tracking

After installing, type/change-trackingin Claude Code to confirm it loaded.

Details

From the project README

Change Tracking

Manages entity states and detects changes for SaveChanges().

Core Components

  • StateManager — owns tracked entries, identity/reference maps, fixup, cascades, notifications, and changed counts
  • InternalEntryBase and derived classes — own per-entry state, flags, values, snapshots, and ordered state transitions
  • ChangeDetector — compares current values with baselines and reports changes through entry mutation APIs
  • SnapshotFactoryFactory subclasses — create passive original- and relationship-value baselines
  • IdentityMap — permits one active entry per key; shared identity pairs a replacement with the prior Deleted entry
  • PropertyAccessorsFactory, ClrPropertyGetterFactory and ClrPropertySetterFactory compile property accessors for efficient snapshotting and change detection
    • Ordinals in indices parameter specify element at each complex collection depth

Change Detection

  • Snapshot and notification strategies both call SetPropertyModified() to keep property flags and entity state consistent.
  • SetEntityState() validates values, updates flags and complex entries, changes state, then runs manager bookkeeping hooks.

Shared-Identity Replacement

SharedIdentityEntry is the invariant that distinguishes an old deleted entry from its replacement with the same identity. When attaching a replacement graph, a deleted nested entry should be reconsidered only when its source entry has a replacement; do not broadly process every deleted node. Likewise, cascading from the old replaced principal must not delete dependents that belong to the replacement graph. Keep synchronous and asynchronous graph-attach paths equivalent and preserve unrelated values in replacement tests so they isolate the identity transition.

Testing

Unit tests: test/EFCore.Tests/ChangeTracking/. Functional tests: test/EFCore.Specification.Tests/GraphUpdates/.

Common Pitfalls

PitfallSolution
State-based checks treat every Added/Deleted entry as a replacementScope replacement behavior through SharedIdentityEntry and the graph source

Validation

  • DetectChanges() identifies modified properties via snapshot comparison
  • Setting original values marks properties as modified or unchanged based on comparison with current values

Comments

Markdown supported