514

これは非常に一般的なタスクのように見えますが、簡単な方法が見つかりません。

最後に適用した移行を元に戻したいです。次のような単純なコマンドを期待していたでしょう

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"

(少なくとも、タイムスタンプをスキップして名前だけを使用できます...)

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

4

15 に答える 15

454

このスレッドにいくつかの説明を追加したいと思います。

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 年 10 月の編集:

同様の質問に関するこの関連する回答によると、正しいコマンドは-TargetEF Core 1.1用であり-Migration、EF Core 2.0用です。

于 2014-05-21T20:41:44.547 に答える
236

EF 5.0 の時点で、説明したアプローチが推奨される方法です。そう

PM> Update-Database -TargetMigration:"NameOfSecondToLastMigration"

または移行例を使用する

PM> Update-Database -TargetMigration:"CategoryIdIsLong"

1 つの解決策は、上記の手順を自動化するラッパー PS スクリプトを作成することです。さらに、これについての機能リクエストを自由に作成してください。または、さらに良いことに、それを実装してみてください! https://github.com/dotnet/ef6

于 2012-08-13T18:38:14.670 に答える
106

EntityFrameworkCore:

Update-Database 20161012160749_AddedOrderToCourse

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

于 2016-10-13T12:25:00.823 に答える
17

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

Update-Database –TargetMigration 201609261919239_yourLastMigrationSucess
于 2016-09-27T23:40:27.703 に答える
2

パッケージ マネージャー コンソールで実行すると、これが機能することがわかりました。

dotnet ef migrations list | select -Last 2 | select -First 1 | ForEach-Object { Update-Database -Migration $_ }

簡単にするスクリプトを作成できます。

于 2019-11-12T18:53:20.310 に答える
2
Update-Database –TargetMigration:"Your migration name"

この問題については、次のリンクをお勧めします。

https://elegantcode.com/2012/04/12/entity-framework-migrations-tips/

于 2019-09-23T05:48:00.927 に答える