Skip to content

Repository files navigation

InventoryApp — 『動かして学ぶ EF Core 実践入門』サンプルコード

在庫・注文管理システムを題材にした、書籍全章共通のサンプルソリューションです。

  • .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.jsonConnectionStrings:Default で設定します。

ビルドとテスト

# ビルド
dotnet build

# テスト(SQLite。DB のセットアップ不要)
dotnet test

マイグレーション(第6章)

# マイグレーション追加
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 が動きます。

デモの実行(第2・7・8・12章)

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.CreatedAtGETUTCDATE() 既定値(第5章)は SQL Server 依存のため、AppDbContext.OnModelCreatingDatabase.IsSqlServer() により分岐している(付録A)。 これによりテストの SQLite でも EnsureCreated が通る。

About

Entity Framework Core in Practice

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages