EF 5 Code First Migrationsから完全なSQLスクリプトを生成する


145

Entity Framework 5 Code First Migrationsを使用して、初期(空の)状態から最新の移行までの完全なデータベーススクリプトを作成するにはどうすればよいですか?

MSDN Blogのブログ投稿はこれを行うことを提案していますが、空のスクリプトを作成するようです:

Update-Database -Script -SourceMigration: $InitialDatabase

回答:


286

APIが変更されたようです(または、少なくとも私には機能しません)。

パッケージマネージャーコンソールで以下を実行すると、期待どおりに動作します。

Update-Database -Script -SourceMigration:0

14
これが正しい答えだと思いますが、通常、パラメータが文字列であるときに0が機能することをどのようにして発見しましたか?!
Dave R

27
私がそれを機能させるためにだまそうと考えることができるすべてを試した後、本当に試行錯誤しました:)
Matt Wilson

1
これはデータベースの正確なコピーを作成しますか?表の内容を含めますか?
Multitut 2015年

2
@Multitut:いいえ、構造のみを実行します。
マーティンクラーク

6
誰かがEfCoreでこれを行う方法を探していて、私のようにここに到達した場合に備えて、コマンドは次のとおりdotnet ef migrations scriptです。その他のマニュアルの:docs.microsoft.com/en-us/ef/core/managing-schemas/migrations/...
ラファエルMiceli

13

エンティティフレームワークコアを使用しているすべての人にとって、ここまでです。これがあなたのやり方です。

# Powershell / Package manager console
Script-Migration

# Cli 
dotnet ef migrations script

-Fromand -Toパラメータを使用して、データベースを特定のバージョンに更新する更新スクリプトを生成できます。

Script-Migration -From 20190101011200_Initial-Migration -To 20190101021200_Migration-2

https://docs.microsoft.com/en-us/ef/core/managing-schemas/migrations/#generate-sql-scripts

このコマンドにはいくつかのオプションがあります。

以下からの移行は、スクリプトを実行する前にデータベースに適用された最後のマイグレーションでなければなりません。マイグレーションが適用されていない場合0は、これを指定します(これがデフォルトです)。

移行は、スクリプトを実行した後、データベースに適用される最後の移行です。デフォルトでは、プロジェクトの最後の移行になります。

冪等のスクリプトは、必要に応じて生成することができます。このスクリプトは、まだデータベースに適用されていない場合にのみ、移行を適用します。これは、データベースに最後に適用された移行が正確にわからない場合、またはそれぞれが異なる移行である可能性がある複数のデータベースに展開する場合に役立ちます。


これはある程度機能します。列名の変更を開始すると、エラーが発生し始めます。DacPacを作成することをお勧めします。特にCI / CDでパイプラインを使い始めるとき
Nick Turner

8

Matt wilsonの回答に追加するために、私はバックアップをとっていなかったので、コードファーストエンティティクラスをたくさん用意しましたが、データベースはありませんでした。そこで、Entity Frameworkプロジェクトで次のことを行いました。

Visual Studioでパッケージマネージャーコンソールを開き、次のように入力します。

Enable-Migrations

Add-Migration

移行に「初期」などの名前を付けてから、移行を作成します。最後に次のように入力します。

Update-Database

Update-Database -Script -SourceMigration:0

最後のコマンドは、エンティティクラスからデータベーステーブルを作成します(エンティティクラスが適切に形成されている場合)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.