From dotnet Claude Kit
Guided migration workflow for EF Core schema changes, .NET version upgrades, and NuGet dependency updates with rollback strategies and verification steps.
How this skill is triggered — by the user, by Claude, or both
Slash command
/dotnet-claude-kit:migrateThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
The single migration workflow for three change types, with EF Core schema
The single migration workflow for three change types, with EF Core schema migrations as the primary flow:
Shared principles: verify before applying, rollback plan always, test after every step, one logical change per migration.
First, classify the request: schema change → Flow A; framework upgrade → Flow B; package update → Flow C. Then follow that flow end to end.
Step 1: Assess current state
dotnet ef migrations list --project <InfraProject> --startup-project <ApiProject>
Check for pending migrations and uncaptured model changes.
Step 2: Review model changes
Use MCP tools instead of reading whole files:
find_symbol(name: entity or DbSet) -- locate the changed entity
get_type_hierarchy(typeName: entity) -- check TPH/TPT/TPC inheritance changes
find_references(symbolName: property) -- assess downstream query impact
Confirm the change is one logical unit. If not, split into multiple migrations — mixed migrations make rollback all-or-nothing.
Step 3: Generate migration
Name describes the change, not the entity: Add|Remove|Rename|Modify + WhatChanged.
# GOOD
dotnet ef migrations add AddOrderShippingAddress --project <Infra> --startup-project <Api>
# BAD — names the entity, not the change
dotnet ef migrations add Order
Step 4: Review generated SQL
database update has no dry-run flag — preview by generating an idempotent
script and reading it:
dotnet ef migrations script --idempotent --project <Infra> --startup-project <Api>
Flag and report:
If data must survive a rename/retype, use a multi-step migration with raw SQL:
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<string>("ContactEmail", "Customers", nullable: true);
migrationBuilder.Sql("UPDATE \"Customers\" SET \"ContactEmail\" = \"Email\"");
migrationBuilder.AlterColumn<string>("ContactEmail", "Customers", nullable: false);
migrationBuilder.DropColumn("Email", "Customers");
}
Step 5: Apply and verify
dotnet ef database update --project <Infra> --startup-project <Api>
dotnet build && dotnet test # integration tests catch schema mismatches
Step 6: Document rollback
dotnet ef database update <PreviousMigrationName> --project <Infra> --startup-project <Api>
dotnet ef migrations remove --project <Infra> --startup-project <Api> # if unapplying from code
Never modify a migration that is already applied — create a new one.
get_project_graph to list all TFMs; flag mixed versions.global.json — SDK version with "rollForward": "latestMinor".<TargetFramework>net10.0</TargetFramework> and
<LangVersion>14</LangVersion> in .csproj or Directory.Build.props.dotnet outdated --upgrade Major --include Microsoft.*,
then build and fix.knowledge/dotnet-whats-new.md: TimeProvider,
HybridCache, primary constructors, collection expressions.dotnet build, dotnet test, dotnet format --verify-no-changes.dotnet list package --outdated and dotnet list package --vulnerable.
Vulnerable packages are urgent: update, test, deploy.dotnet build && dotnet test
before the next. Batched updates make failures unattributable.knowledge/package-recommendations.md before adding
new packages; prefer built-in .NET alternatives.find_symbol / find_references — locate entities, assess schema-change impactget_type_hierarchy — entity inheritance for TPH/TPT/TPCget_project_graph — TFM audit before version upgradesget_diagnostics — catch warnings after migration generation or upgradesUser: /migrate
Claude: Checking migration state...
Last applied: 20250710_AddOrderTable
Model changes detected: new ShippingAddress property on Order entity.
Creating migration: AddOrderShippingAddress
Reviewing SQL (dotnet ef migrations script --idempotent)...
- ALTER TABLE "Orders" ADD "ShippingStreet" text NULL
- ALTER TABLE "Orders" ADD "ShippingCity" text NULL
No data loss. No locking risk. Safe to apply.
Applying migration... Done. Build: green. Tests: 34/34 passed.
Rollback (if needed):
dotnet ef database update AddOrderTable --project src/Infrastructure --startup-project src/Api
ef-core — entity configuration, query patterns, migration internals/verify — full verification pipeline after migration work/checkpoint — commit a safe state before risky migrationsnpx claudepluginhub codewithmukesh/dotnet-claude-kit --plugin dotnet-claude-kitPlans and executes database, framework, and dependency migrations with breaking change analysis, phased rollout, and rollback procedures.
Upgrading .NET to a newer TFM. LTS-to-LTS, staged through STS, preview, upgrade paths.
Guides framework and language migrations: version upgrades, breaking changes, dependency audits, codemods, rollbacks. For React 19, Next.js App Router, Python 3.12, Node 22, etc.