SuperAPI AI 工具集

update-pipeline

数据与分析

查看项目

更新于 10-15 21:12

技能介绍

用途:介绍 EF Core SaveChanges 与更新管线的实现细节,说明被跟踪实体变更如何转换为数据库的 INSERT/UPDATE/DELETE 命令。

主要流程:SaveChanges → DetectChanges → IDatabase.SaveChanges → UpdateAdapter 创建 IUpdateEntry 列表 → CommandBatchPreparer.BatchCommands,为每张表的每一行生成 ModificationCommand,其由按列组成的 ColumnModification 构成;通过 SharedTableEntryMap 跟踪映射到同一行的条目;使用 Multigraph 按外键依赖做拓扑排序;按最大批大小分组为 ModificationCommandBatch;由 UpdateSqlGenerator 按批生成 SQL;BatchExecutor 在一个事务中执行所有批次;最后由 StateManager.AcceptAllChanges 接受变更。

并发:并发令牌作为 UPDATE/DELETE 的 WHERE 条件,AffectedCountModificationCommandBatch 检查受影响行数,不匹配时抛出 DbUpdateConcurrencyException。

共享行取值:当某一 CLR 条目替换映射到同一行的另一条目时,列访问器可能需要从 SharedIdentityEntry 取值。应在解析列的属性映射之前选择有效条目;共享身份对中的条目可能有不同实体类型,因此不得对替换条目使用原类型的属性。回归测试应覆盖由此产生的命令依赖顺序,而不只是孤立测试访问器。

验证要点:SaveChanges 返回预期的受影响行数;存储生成值在 INSERT/UPDATE 后回传到实体;数据过期时按预期抛出 DbUpdateConcurrencyException。