SuperAPI AI 工具集

change-tracking

编程与开发

查看项目

更新于 10-15 21:12

技能介绍

用途:该资料介绍 EF Core 变更跟踪的内部实现,用于管理实体状态并在 SaveChanges() 时检测变更,适合需要改动变更跟踪内部组件的开发者参考。

主要能力与核心组件:StateManager 负责跟踪条目、标识/引用映射、fixup、级联、通知和已变更计数;InternalEntryBase 及其派生类持有每条目的状态、标志、值、快照和有序状态转换;ChangeDetector 将当前值与基线比较并通过条目变更 API 报告变化;SnapshotFactoryFactory 子类创建被动的原始值与关系值基线;IdentityMap 保证每个键只有一个活动条目,共享标识将替换条目与先前的 Deleted 条目配对;PropertyAccessorsFactory、ClrPropertyGetterFactory 与 ClrPropertySetterFactory 编译属性访问器以提升快照和变更检测效率;索引中的序数(Ordinals)用于指定各复杂集合深度上的元素。

使用方式:快照与通知两种策略均调用 SetPropertyModified() 以保持属性标志与实体状态一致;SetEntityState() 先验证值、更新标志与复杂条目、变更状态,再执行管理器簿记钩子;DetectChanges() 通过快照比较识别已修改属性,设置原始值时会依据与当前值的比较把属性标记为已修改或未修改。

共享标识替换:SharedIdentityEntry 是区分同一标识下旧 Deleted 条目与其替换条目的不变量。附加替换图时,只有当嵌套 Deleted 条目的源条目已有替换时才应重新考虑;不要广泛处理每个已删除节点;从被替换的旧主体级联时不得删除属于替换图的依赖项;同步与异步图附加路径应保持等价,替换测试应保留无关值以隔离标识转换。

限制与坑:基于状态的检查会把每个 Added/Deleted 条目都当作替换,解决办法是通过 SharedIdentityEntry 和图来源限定替换行为范围。

测试位置:单元测试在 test/EFCore.Tests/ChangeTracking/,功能测试在 test/EFCore.Specification.Tests/GraphUpdates/。资料未提供安装命令、收费或平台信息。