mcpField
U
update-pipeline

update-pipeline

github.com/dotnet开发14.8k52 次安装今天更新
代码仓库

关于 update-pipeline

用于 Entity Framework Core 更新管线开发的技能,介绍如何将跟踪的实体变更转为数据库命令,并涵盖命令排序、批处理、并发检查和验证。

主要功能

  1. 01变更检测与命令准备
  2. 02外键依赖排序
  3. 03SQL 生成与命令批处理
  4. 04并发令牌检查
  5. 05存储生成值验证

适用场景

  1. 01跟踪 SaveChanges 命令执行过程
  2. 02测试外键排序与批处理
  3. 03验证过期写入的并发错误

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/dotnet/efcore --skill update-pipeline

安装后在 Claude Code 中输入/update-pipeline确认已加载。

详细介绍

更新管道

在 SaveChanges() 期间,将已跟踪的实体更改转换为数据库 INSERT/UPDATE/DELETE 命令。

流程

SaveChanges() → DetectChanges() → IDatabase.SaveChanges() → UpdateAdapter 创建 IUpdateEntry 列表 → CommandBatchPreparer.BatchCommands() → 每个表行对应一个 ModificationCommand,由每列对应的 ColumnModification 组成 → 使用 SharedTableEntryMap 跟踪映射到同一行的条目 → 通过 Multigraph 进行拓扑排序(按 FK 依赖关系排序) → 分组为 ModificationCommandBatch(遵循最大批次大小) → UpdateSqlGenerator 为每个批次生成 SQL → BatchExecutor 在事务中执行所有批次 → StateManager.AcceptAllChanges()

并发

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

共享行值访问

命令状态描述的是行操作,而非每个条目:带有已删除 SharedIdentityEntry 的 Added 替换项可以参与 Modified 命令。访问原始值时,必须使用已删除共享条目中的原始值,以保留用于依赖关系排序的先前 FK。

验证

  • SaveChanges() 返回预期的受影响行数
  • INSERT/UPDATE 后,存储生成的值会传播回实体
  • 预期会发生时,针对过时数据抛出 DbUpdateConcurrencyException

评论

支持 Markdown