Skip to main content

change-tracking

Implementation details for EF Core change tracking. Use when changing InternalEntityEntry, ChangeDetector, SnapshotFactoryFactory, or related entity state, snapshot, or property accessor code.

Quellinformationen

Repository
dotnet/efcore
Letzte Quellaktivität
8. Oktober 2026 um 18:29
Erkannte Sprache von SKILL.md
Englisch
Sterne
14.798
Forks
3.437

Installationsoptionen

Standardmäßig ist der Prompt ausgewählt, der zuerst die Quelle prüft. Sie können zu einem direkten Befehl wechseln oder eine lokale Kopie herunterladen.

Quelldateien prüfen

Lesen Sie SKILL.md und alle von SkillsMP angezeigten Begleitdateien, bevor Sie sich für eine Installation entscheiden.

SKILL.md wird angezeigt

SKILL.md
Quellanweisungen · Schreibgeschützte Vorschau
name
change-tracking
description
Implementation details for EF Core change tracking. Use when changing InternalEntityEntry, ChangeDetector, SnapshotFactoryFactory, or related entity state, snapshot, or property accessor code.
user-invocable
false
# 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 | Pitfall | Solution | |---------|----------| | State-based checks treat every Added/Deleted entry as a replacement | Scope 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
Auf GitHub ansehen