在庫・注文管理システムを題材にした、書籍全章共通のサンプルソリューションです。
- .NET 10 / EF Core 10
- メイン DB:SQL Server(LocalDB)、テスト:SQLite(インメモリ)
| プロジェクト | 役割 | 主な対応章 |
|---|---|---|
InventoryApp.Domain |
エンティティ9個+enum+所有型 Address | 第4・5章 |
InventoryApp.Data |
DbContext・Fluent API 構成・マイグレーション・シード・サービス | 第3・5・6・9・12章 |
InventoryApp.Console |
各章の動作確認デモ | 第2・7・8・12章 |
InventoryApp.Tests |
xUnit テスト(SQLite in-memory) | 第13章 |
- .NET 10 SDK
- SQL Server LocalDB(Windows)または接続文字列を書き換えて任意の SQL Server / Docker
接続文字列は InventoryApp.Console/appsettings.json の ConnectionStrings:Default で設定します。
# ビルド
dotnet build
# テスト(SQLite。DB のセットアップ不要)
dotnet test# マイグレーション追加
dotnet ef migrations add <Name> --project InventoryApp.Data --startup-project InventoryApp.Data
# 本番向け SQL スクリプト出力(冪等)
dotnet ef migrations script --idempotent --project InventoryApp.Data --startup-project InventoryApp.Dataデザインタイムファクトリ(AppDbContextFactory)を用意しているため、Data プロジェクト単体で dotnet ef が動きます。
Console アプリは起動時にマイグレーションを適用し、サンプルデータを投入します(SeedData)。
発行される SQL はログに出力されます(LogTo)。
# 使い方: dotnet run --project InventoryApp.Console -- <demo>
dotnet run --project InventoryApp.Console -- crud # 第2章:CRUD
dotnet run --project InventoryApp.Console -- query # 第7章:LINQ・射影・集計
dotnet run --project InventoryApp.Console -- nplus1 # 第8章:N+1 と対策
dotnet run --project InventoryApp.Console -- concurrency # 第12章:楽観的同時実行制御
dotnet run --project InventoryApp.Console -- all # すべて(既定)Product.RowVersion(第12章)とInventoryTransaction.CreatedAtのGETUTCDATE()既定値(第5章)は SQL Server 依存のため、AppDbContext.OnModelCreatingでDatabase.IsSqlServer()により分岐している(付録A)。 これによりテストの SQLite でもEnsureCreatedが通る。