これは非常に一般的な作業のように見えますが、それを実行する簡単な方法を見つけることができません。
最後に適用した移行を元に戻したいです。私はのような簡単なコマンドを期待していただろう、
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"
(少なくとも、タイムスタンプを省略して、名前だけを使用することができます。)
もっと簡単な方法はありますか?
EF 5.0の時点では、あなたが説明したアプローチが好ましい方法です。 1つの解決策は、上記の手順を自動化するラッパーPSスクリプトを作成することです。さらに、これに対する機能要求を自由に作成してください。もっと良いのは、それを実装する際に一撃をすることです! http://entityframework.codeplex.com/ /
このスレッドに明確化を加えたいと思います。
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
これと同じ質問の answer によると、正しいパラメータ名は-Target
(EF Core 1.1の場合)または-Migration
(EF Core 2.0の場合)です。
EntityFrameworkCore :に
Update-Database 20161012160749_AddedOrderToCourse
20161012160749_AddedOrderToCourse
は、ロールバック先の移行の名前です。
解決策は次のとおりです。
Update-Database –TargetMigration 201609261919239_yourLastMigrationSucess
追加の注意事項
複数の設定タイプがある場合は、[ConfigurationName]を指定する必要があります。
Update-Database -Configurationtypename [ConfigurationName] -TargetMigration [MigrationName]
EFコアでは、誤った移行を追加した後に、パッケージマネージャコンソールでコマンドRemove-Migration
を入力できます。
移行によってデータが失われる可能性がある場合は、コンソールにその旨が表示されます。
データが失われる可能性がある操作が足場に入れられました。正確性については移行を確認してください。この操作を元に戻すには、Remove-Migrationを使用します。
update-database 0
This will roll back all migrations in EFCore
私は EntityFrameworkCoreを使用しています 私は@MaciejLisCKによる答えを使用しています。複数のDBコンテキストがある場合は、コンテキストパラメータを追加してコンテキストを指定する必要もあります。 :
Update-Database 201207211340509_MyMigration -context myDBcontext
(201207211340509_MyMigration
はロールバック先のマイグレーション、myDBcontext
はDBコンテキストの名前です)