mcpField
U
update-pipeline

update-pipeline

github.com/dotnetDevelopment14.8k52 installsUpdated today
Repository

About update-pipeline

A development skill for the Entity Framework Core update pipeline, from tracked entity changes to database commands. It covers command ordering, batching, concurrency checks, and validation.

Key features

  1. 01Change detection and command preparation
  2. 02Foreign-key dependency ordering
  3. 03SQL generation and command batching
  4. 04Concurrency token checks
  5. 05Store-generated value validation

Use cases

  1. 01Tracing SaveChanges command execution
  2. 02Testing foreign-key ordering and batching
  3. 03Validating stale-write concurrency errors

Install

Copy the command and run it in a terminal.

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

After installing, type/update-pipelinein Claude Code to confirm it loaded.

Details

From the project README

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

Comments

Markdown supported