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.

ソース情報

リポジトリ
dotnet/efcore
ソースの最終更新活動
2026年10月8日 18:29
検出された SKILL.md の言語
英語
スター
14,798
フォーク
3,437

インストール方法

デフォルトでは、最初にソースを確認する Prompt が選択されています。直接コマンドに切り替えるか、ローカルコピーをダウンロードすることもできます。

ソースファイルを確認

インストールを決める前に、SKILL.md と SkillsMP に表示されている付属ファイルをお読みください。

SKILL.md を表示中

SKILL.md
ソースの指示 · 読み取り専用プレビュー
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
GitHubで見る