Entity Framework Core による DDL の生成(Script-Migration)

技術情報
公開 2023年7月28日 最終更新 2025年11月7日

はじめに

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

参考

Script-Migration