web-dev-qa-db-ja.com

EF移行:最後に適用された移行をロールバックしますか?

これは非常に一般的な作業のように見えますが、それを実行する簡単な方法を見つけることができません。

最後に適用した移行を元に戻したいです。私はのような簡単なコマンドを期待していただろう、

PM> Update-Database -TargetMigration:"-1"

代わりに、私が思いつくことができるのは、以下のとおりです。

PM> Get-Migrations

Retrieving migrations that have been applied to the target database.
201208012131302_Add-SystemCategory
201207311827468_CategoryIdIsLong
201207232247409_AutomaticMigration
201207211340509_AutomaticMigration
201207200025294_InitialCreate

PM> Update-Database -TargetMigration:"CategoryIdIsLong"

(少なくとも、タイムスタンプを省略して、名前だけを使用することができます。)

もっと簡単な方法はありますか?

382

EF 5.0の時点では、あなたが説明したアプローチが好ましい方法です。 1つの解決策は、上記の手順を自動化するラッパーPSスクリプトを作成することです。さらに、これに対する機能要求を自由に作成してください。もっと良いのは、それを実装する際に一撃をすることです! http://entityframework.codeplex.com/ /

131
Andrew Peters

このスレッドに明確化を加えたいと思います。

Update-Database -TargetMigration:"name_of_migration"

上記で行っていることは、指定したマイグレーションが残されるまで、すべてのマイグレーションをロールバックしたいということです。したがって、GET-MIGRATIONSを使用し、A、B、C、D、およびEがあることがわかった場合は、このコマンドを使用してEとDをロールバックしてCに移動します。

Update-Database -TargetMigration:"C"

また、誰かが反対にコメントできない限り、序数値と短い-Targetスイッチを使用できることに気付きました(したがって、-Targetは-TargetMigrationと同じです)。すべてのマイグレーションをロールバックして最初からやり直したい場合は、以下のものを使用できます。

update-database -target:0

上記の0は、最初の移行でもロールバックします( これは破壊的なコマンドです - 使用する前に自分の行っていることを確認してください! )上記の場合、ターゲットマイグレーションの名前が必要です(マイグレーションが適用される前に、0番目のマイグレーションの名前は存在しません)。その場合は、0(序数)の値を使用する必要があります。同様に、マイグレーションA、B、C、D、およびEを(この順序で)適用した場合は、序数1はAを参照し、序数2はBを参照するようになります。そのため、Bにロールバックするには、次のいずれかを使用できます。

Update-Database -TargetMigration:"B"

または

Update-Database -TargetMigration:2

2019年1月の編集:

これと同じ質問の answer によると、正しいパラメータ名は-Target(EF Core 1.1の場合)または-Migration(EF Core 2.0の場合)です。

351
Jazimov

EntityFrameworkCore :に

Update-Database 20161012160749_AddedOrderToCourse

20161012160749_AddedOrderToCourseは、ロールバック先の移行の名前です。

58
MaciejLisCK

解決策は次のとおりです。

Update-Database –TargetMigration 201609261919239_yourLastMigrationSucess
11
Max

追加の注意事項

複数の設定タイプがある場合は、[ConfigurationName]を指定する必要があります。

Update-Database -Configurationtypename [ConfigurationName] -TargetMigration [MigrationName]
3
Amos

EFコアでは、誤った移行を追加した後に、パッケージマネージャコンソールでコマンドRemove-Migrationを入力できます。

移行によってデータが失われる可能性がある場合は、コンソールにその旨が表示されます。

データが失われる可能性がある操作が足場に入れられました。正確性については移行を確認してください。この操作を元に戻すには、Remove-Migrationを使用します。

update-database 0

This will roll back all migrations in EFCore
0
user1883961

私は EntityFrameworkCoreを使用しています 私は@MaciejLisCKによる答えを使用しています。複数のDBコンテキストがある場合は、コンテキストパラメータを追加してコンテキストを指定する必要もあります。 :

Update-Database 201207211340509_MyMigration -context myDBcontext

201207211340509_MyMigrationはロールバック先のマイグレーション、myDBcontextはDBコンテキストの名前です)

0
Chris Halcrow