Entity Framework Core による DDL の生成(Script-Migration)
技術情報
最終更新 2025年11月7日
目次
-
- 3.1. すべてを適用する SQL を生成
- 3.2. (B) + (C) + (D) を生成
- 3.3. (B) + (C) を生成
- 3.4. ファイルに出力したい場合
はじめに
Entity Framework Core(EF Core) では「モデル変更 → マイグレーション → データベース更新」という SQL を直接使用しない手順でデータベースを更新できます。ただし、本番環境では SQL を使ってデータベースを更新する必要があったり、あるいはデータベース変更前にどのような SQL が実行されるかを確認したいケースもあるかと思います。EF Core ではマイグレーション間の差分からデータベースを更新する DDL スクリプトを生成できます。
実行コマンド
マイグレーション間の差分を SQL スクリプトとして生成するには以下のコマンドを使用します。
dotnet ef migrations script [From] [To] [--context AppDbContext]
または
Script-Migration From [From] [To] [-Context コンテキスト名]
From
From より後(From <)のマイグレーションを適用する SQL が生成されます。
From はマイグレーション対象に含まれません。To
To まで(≦ To)のマイグレーションを適用する SQL が生成されます。
To がマイグレーション対象に含まれます。
To を指定する場合は、From の指定が必須になります。
- -Context コンテキスト名
一つのプロジェクトで複数の DbContext を併用してる場合、対象のコンテキストを指定する必要があります。
例
以下のような Migration の履歴がある場合を例にします。
Migrations/
├─ 20230516073612_Hoge_A.cs ... (A)
├─ 20230705015302_Hoge_B.cs ... (B)
├─ 20230705023114_Hoge_C.cs ... (C)
└─ 20230705075249_Hoge_D.cs ... (D)
すべてを適用する SQL を生成
dotnet ef migrations script
(B) + (C) + (D) を生成
「(A) より後」と指定します。
dotnet ef migrations script Hoge_A
(B) + (C) を生成
「(A) より後、(C) まで」と指定します。
dotnet ef migrations script Hoge_A Hoge_C
ファイルに出力したい場合
--output オプションを使用します。
dotnet ef migrations script --output update.sql