mir-backend-dotnet-aspnetcorelisted
Install: claude install-skill anantbhandarkar/make-it-right
# /mir-backend-dotnet-aspnetcore · Make It Right (ASP.NET Core)
Bottom tier of the chain: `mir-backend` (generic gates) → `mir-backend-dotnet` (CLR runtime model) → **this** (ASP.NET Core / EF Core / Minimal API library mechanics). Run the gates first; load the .NET runtime tier for async model, DI lifetime theory, and thread-pool concerns; reach for *this* at Gate 5 (design mechanics), Gate 6 (implementation), and Gate 7 review. **Runtime-level concerns (sync-over-async deadlock, ConfigureAwait(false), ValueTask, IDisposable, CancellationToken propagation, captive dependency theory) live in `mir-backend-dotnet` — not here.**
**Stack assumed (verified 13 Aug 2026):** **ASP.NET Core 10** (controllers or Minimal APIs) · **EF Core 10** · SQL Server / PostgreSQL · `Microsoft.EntityFrameworkCore.Design` migrations. Current patch is 10.0.11 (11 Aug 2026).
Version notes that change what you should write:
- **EF Core 10 requires .NET 10.** There is no EF Core 10 on `net8.0`. A project stuck on `net8.0`/`net9.0` is stuck on EF Core 8/9, and both of those runtimes leave support on **10 Nov 2026** (see `mir-backend-dotnet`).
- **EF Core 10 changed how parameterized collections translate** — see footgun 4. This is the one upgrade change most likely to show up as a production latency regression rather than a compile error.
- **`ExecuteUpdateAsync` now takes a plain lambda instead of an expression tree** in EF Core 10. Code that composed `Expression<Func<SetPropertyCalls<T>, SetPropert