Update Pipeline

SkillDev tools

Gives your agent implementation details for EF Core SaveChanges and the update pipeline when editing related code.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the Update Pipeline skill

About this capability

Implementation details for EF Core SaveChanges and the update pipeline. Use when changing CommandBatchPreparer, UpdateSqlGenerator, ModificationCommand, or related classes.

What this skill tells your AI

The instructions your AI receives, as published by dotnet/efcore in .agents/skills/update-pipeline/SKILL.md and read by ahel’s review.

Converts tracked entity changes into database INSERT/UPDATE/DELETE commands during SaveChanges().

Flow

SaveChanges()DetectChanges()IDatabase.SaveChanges()UpdateAdapter creates IUpdateEntry list → CommandBatchPreparer.BatchCommands()ModificationCommand per table row, composed of ColumnModification per column → SharedTableEntryMap is used to track entries mapped to the same row → Topological sort via Multigraph (FK dependency ordering) → Groups into ModificationCommandBatch (respects max batch size) → UpdateSqlGenerator generates SQL per batch → BatchExecutor executes all batches in a transaction → StateManager.AcceptAllChanges()

Concurrency

Concurrency tokens → WHERE conditions on UPDATE/DELETE. AffectedCountModificationCommandBatch checks affected rows. Throws DbUpdateConcurrencyException on mismatch.

Validation

  • SaveChanges() returns expected affected row count
  • Store-generated values propagate back to entities after INSERT/UPDATE
  • DbUpdateConcurrencyException thrown when expected for stale data

Signals

GitHub stars
15k
Forks
3k
Last commit
Sep 2026
Advanced
Catalog kind
skill
Gateway key
update-pipeline
Source
github.com/dotnet/efcore