エンティティフレームワーク-最初からやり直す-すべての移行を元に戻す/ロールバックする


168

何らかの理由で、私の移行はごちゃごちゃした/破損している/何であれようです。やり直したいところです。すべての移行を完全に元に戻し、履歴を消去し、移行コードを削除する方法があるので、元の状態に戻しますか?

例)PM> Disable-MigrationsまたはRollback-Migrations

元の移行ステップ(つまり、InitialSchemaターゲットのようなもの)に "更新"したくないので、それを見つけることができません。

回答:


358

以下を使用して、任意の移行にロールバックできます。

Update-Database -TargetMigration:"MigrationName"

すべてのマイグレーションをロールバックしたい場合は、以下を使用できます。

Update-Database -TargetMigration:0

または同等:

Update-Database -TargetMigration:$InitialDatabase 

場合によっては、データベースとすべての移行クラスを削除することもできます。


6
いつものように、あなたは最高です。
drzaus

2
わかりません。OPには「元の移行ステップ(つまり、InitialSchemaターゲットのようなもの)が見つからないため、「更新」したくない」と具体的に記述されています。この答えは彼が望んでいることをどのように行うのですか?私が起こることを期待していたことは、私はenable-migrations再びしなければならない状態になるということでした。これらは明らかに役に立ちますが、OPが求めていることを達成しますか?(「まあ、彼は答えを受け入れた」と返信しないでください。私はこれを理解しようとしているのです。賢者ではありません)。
Michael Blackburn

@MichaelBlackburn:enable-migrationsもう一度実行して、データベースをゼロから開発している場合は、最後の文(データベースとすべての移行関連コードを削除する)に従うだけです。既存のデータベースで移行を使用し始めた場合は、最初に2番目または3番目のコマンドを使用してすべての移行を元に戻し、次にMigrationHistoryテーブルとすべての移行関連コードを削除する必要があります。開始位置に移動するはずです。また、(マイグレーションを使用する前の)バックアップからデータベースを開始し、マイグレーション関連のすべてのコードを削除することもできます。
Ladislav Mrnka、

4
@MichaelBlackburn:私が見た他のすべてのソリューションは最初の名前付き移行に更新するように指示することでしたが、私の問題は更新(戻る)する最初のクリーンな移行がないということでした-ただメソッドに関係なく、すべてのマイグレーションを削除したいと考えていました。したがって、この回答は次の問題への私の懸念に対処しました-TargetMigration:0
drzaus 2013年


8

明確にするために、LocalDbを使用している場合、最初からやり直したいときは、データベースエクスプローラーでデータベースを削除してからenable-migrations -force、パッケージマネージャーコンソールに入力します。App_Dataフォルダーを介してデータベースを削除しないでください。削除すると、次の問題が発生します。


2
警告を出さずにMigrations \ Configuration.csを上書きするため、これを行うときは注意してください。
cgatian 2014

警告のおかげで、しばらくして最初のコードをほとんど落としました、すべてのコードを一度に配置し、データベース自体のソース管理のバージョン管理を行うのはいいことですが、他の大きなメリットは見られませんでした最初にデータベースに切り替えました。Red Gate Sql Compareを使用してすべてのデルタを追跡しています。
ブライアンオグデン2014


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.