最初にEFコードと.netコアを使用して移行のスクリプトを生成できますか?


83

.Net Coreを使用してMVCアプリケーションを構築しており、移行のスクリプトを生成する必要があります。

EF6でコマンドを実行しました

update-database -script

しかし、.net Coreで同じことをしようとすると、次の例外がスローされます。

更新-データベース:パラメーター名 'script'に一致するパラメーターが見つかりません

EFコアに相当するものがあるかどうか知っていますか?

回答:


123

EFのドキュメントに従って、Script-Migrationコマンドを使用できます。

すべての移行をスクリプト化するだけの場合は、そのようにパッケージマネージャーコンソールから呼び出すことができます。前回の移行からの変更をスクリプト化するだけの場合は、次のように呼び出すことができます。

Script-Migration -From <PreviousMigration> -To <LastMigration>

必ずドキュメントを確認してください。コマンドにはさらにいくつかのオプションがあります。


1
スクリプト移行ツールは、ダウングレードでは機能しないようです(To移行がFrom移行よりも古い場合)。「元に戻す」スクリプトを生成する方法に関するアイデアはありますか?
Nullius 2017年

1
@Nulliusを呼び出したくない、または「undoScript」のように表示するには、コードを元に戻し、Dbを更新して、最新のスクリプトを取得する必要があります...
Haithem KAROUI 2017

1
db-migrationsも管理するデプロイサーバーがあります。例:デプロイがロールバックされると、データベースも以前の状態にダウングレードする必要があります。db-migrationsを管理するビルドステップには、「up」および「down」スクリプトが必要です。スクリプト移行は、From移行よりも古いTo移行を指定する場合にも機能することがわかりました。ただし、実際に移行する移行の前に、移行先を設定する必要があります。また、最新の移行用に「down」スクリプトを生成しようとする場合は、From移行パラメーターに「ZZZZZZ」(または同様のもの)を使用する必要があります。
Nullius 2017

2
最初の移行用のスクリプトを生成しようとするとどうなりますか。以前の
移行

2
スクリプトに@tchelidze -fromパラメータ0例えば、スクリプト、移行-from 0に設定された初期の移行、
TallMcPaul

19

dotnet corecliを使用してスクリプトを生成できます

dotnet ef migrations script 

また、新しいPowerShellout-fileコマンドを使用してこれをファイルに保存することもできます。

dotnet ef migrations script | out-file ./script.sql

1
良いヒント、またはCMD:dotnetef移行スクリプト> script.sql
Tore Aurstad

11
dotnet ef migrations script --help

Usage: dotnet ef migrations script [arguments] [options]

Arguments:
  <FROM>  The starting migration. Defaults to '0' (the initial database).
  <TO>    The ending migration. Defaults to the last migration.

Options:
  -o|--output <FILE>                     The file to write the result to.
  -i|--idempotent                        Generate a script that can be used on a database at any migration.
  -c|--context <DBCONTEXT>               The DbContext to use.
  -p|--project <PROJECT>                 The project to use.
  -s|--startup-project <PROJECT>         The startup project to use.
  --framework <FRAMEWORK>                The target framework.
  --configuration <CONFIGURATION>        The configuration to use.
  --runtime <RUNTIME_IDENTIFIER>         The runtime to use.
  --msbuildprojectextensionspath <PATH>  The MSBuild project extensions path. Defaults to "obj".
  --no-build                             Don't build the project. Only use this when the build is up-to-date.
  -h|--help                              Show help information
  -v|--verbose                           Show verbose output.
  --no-color                             Don't colorize output.
  --prefix-output                        Prefix output with level.

だから、あなたは試すことができます

dotnet ef migrations script ver1 ver2
dotnet ef migrations script ver1 ver2 -o ./script.sql

これは.NetCore2.1で機能します


10

パラメータをScript-Migrationに戻すことにより、移行をロールバックするスクリプトを生成することもできます。たとえば、BadLatestMigrationとGoodPreviousMigrationの2つの移行がある場合、次のコマンドを使用してGoodPreviousMigrationに戻すことができます。

Script-Migration BadLatestMigration GoodPreviousMigration 

その後、必ず削除-移行して、不正な移行を削除してください

Remove-Migration

これは.NetCore2.2.0で機能します


私はロールバックを探していました、そしてこれは私のためにそれを解決しました。3.0 EFコアで動作します
Sehab

5

これもSQLのみを生成します

Update-Database -script -TargetMigration TO -SourceMigration FROM

6
これはEF5のために真である、私はそれがEF6またはEFコア上で動作するとは思わない
のYuvalペレルマン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.