Back to Efcore

Change Tracking

.agents/skills/change-tracking/SKILL.md

11.0.1001.1 KB
Original Source

Change Tracking

Manages entity states and detects changes for SaveChanges().

Core Components

  • StateManager — central engine, identity maps, tracks all entities
  • InternalEntityEntry — per-entity state, property flags, snapshots
  • SnapshotFactoryFactory subclasses build snapshot factories for change detection
  • PropertyAccessorsFactory, ClrPropertyGetterFactory and ClrPropertySetterFactory compile property accessors for efficient snapshotting and change detection
    • Ordinals in indices parameter specify element at each complex collection depth

Testing

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

Common Pitfalls

PitfallSolution
There is a failure when there is shared identity entry (Added and Deleted)Add code that checks SharedIdentityEntry

Validation

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