Skip to main content

update-pipeline

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

Datos de origen

Repositorio
dotnet/efcore
Última actividad en el origen
16 de octubre de 2026 a las 17:45
Idioma detectado de SKILL.md
inglés
Estrellas
14.810
Forks
3439

Opciones de instalación

De forma predeterminada está seleccionado el prompt que primero revisa el origen. Puedes cambiar a un comando directo o descargar una copia local.

Revisa los archivos de origen

Lee SKILL.md y los archivos complementarios que muestra SkillsMP antes de decidir si quieres instalarlo.

Mostrando SKILL.md

SKILL.md
Instrucciones de origen · Vista previa de solo lectura
name
update-pipeline
description
Implementation details for EF Core SaveChanges and the update pipeline. Use when changing CommandBatchPreparer, UpdateSqlGenerator, ModificationCommand, or related classes.
user-invocable
false
# 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 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. ## Shared-Row Value Access Command state describes the row operation, not every entry: an Added replacement with a Deleted `SharedIdentityEntry` can participate in a Modified command. Original-value access must use the original value from the deleted shared entry, preserving the previous FK for dependency ordering. ## Validation - `SaveChanges()` returns expected affected row count - Store-generated values propagate back to entities after INSERT/UPDATE - `DbUpdateConcurrencyException` thrown when expected for stale data
Ver en GitHub