update-pipeline
Implementation details for EF Core SaveChanges and the update pipeline. Use when changing CommandBatchPreparer, UpdateSqlGenerator, ModificationCommand, or related classes.
Installation
Follow the repository instructions for this skill and your agent. Review the files and dependencies before adding it to your workflow.
View source ↗GuidesSkill instructions
Update Pipeline
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 entity (maps to table row), composed of ColumnModification (maps to column value)
→ 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()
Other Key Files:
-
src/EFCore.Relational/Update/Internal/SharedTableEntryMap.cs— manages entries mapped to the same row
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
-
DbUpdateConcurrencyExceptionthrown when expected for stale data
Examples
Read the usage examples in the source repository.
View source ↗Source history
- Indexed on
- 2026-03-11
- Index updated
- 2026-03-11
- Branch
- main
Index and sync dates describe this directory. View the source repository for code history.
GitHub ↗chat Comments (0)
Sign in to join the discussion and leave a comment.
No comments yet. Be the first to share your thoughts!