303

これは本当に一般的な作業のようですが、簡単な方法はありません。EFの移行:最後に適用された移行をロールバックしますか?

最後に適用された移行を取り消したいとします。

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" 

(少なくとも私は、タイムスタンプを飛ばし、名前だけを使用することができます...):私は、私が思い付くことができるすべては、代わりに

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

のように、簡単なコマンドを期待しているだろう

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

答えて

112

EF 5.0以降、あなたが記述したアプローチが好ましい方法です。 1つの解決策は、上記の手順を自動化するラッパーPSスクリプトを作成することです。また、この機能のリクエストを作成してもよろしいですか、それとも実装したほうがいいですか? http://entityframework.codeplex.com/

+3

もう1つ詳細:既存の手動移行がある場合は、ロールバックする必要がありますが、実際には「ダウン」方法では正常にロールバックされないことがわかっているので、編集して保存してから、それが適切にロールバックされるまでターゲットを絞ってください。手動マイグレーションを変更しても、それを適用した後でも、編集が許可されていないものにはなりません。 –

+0

これは私のためには機能しません。 – tutiplain

269

私はこのスレッドにいくつかの明確化を追加したい:

Update-Database -TargetMigration:"name_of_migration" 

あなたが上記のやっていることはあなたがあなたが指定した移行が残っているまで、すべての移行をロールバックしたいと言っています。したがって、あなたがGET-MIGRATIONSを使用して、あなたが、B、C、D、およびEを持っていることを発見した場合、このコマンドを使用してCにあなたを取得するにはEとDをロールバックします:

Update-Database -TargetMigration:"C" 

また、しない限り、誰でも逆にコメントすることができます、私はあなたが序数の値と短いターゲットスイッチを使うことができることに気付きました(したがって、ターゲットはTargetMigrationと同じです)。あなたはすべての移行をロールバックして最初からやり直したい場合は、あなたが使用することができます。

update-database -target:0 

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

Update-Database -TargetMigration:"B" 

または

Update-Database -TargetMigration:2 
+21

インデックス0のマイグレーション名は '$ InitialDatabase'です – MEMark

+0

ありがとうございます。他のインデックス位置を参照するための$(name)値はありますか? $ LatestDatabaseのようなものか、そのようなものがありますか? – Jazimov

+0

私は単純なグーグルでは見つけられませんでした.EFのソースコードを参照すると、それらが明らかになるでしょうか? – MEMark

8

ソリューションです:EntityFrameworkCore

Update-Database –TargetMigration 201609261919239_yourLastMigrationSucess 
+5

これは既に質問で言われています。私はこれがどのように役立つのか分かりませんが、もっと明確にすることができますか? – ANeves

28

Update-Database 20161012160749_AddedOrderToCourse 

20161012160749_AddedOrderToCourseは、ロールバックするマイグレーションの名前です。

+1

GEM!この回答を見つけるまでにはしばらく時間がかかりました(.NET Coreのために変更されたので)。間違いなくupvoteの価値がある! – HockeyJ

+1

今は動作しません –

+0

試しましたが、もう動作しません – xiamx

関連する問題