c# entityframework migration - Entity Frameworkのロールバックと悪いマイグレーションの除去





2 Answers

問題は、まだリリースされていない開発タイプ環境での移行にも適用されることを示しています。

この問題は、次の2つの手順で解決できます。まず、データベースを最後の正常な移行に復元し、次に不正な移行をEntity Frameworkプロジェクトから削除します。

手順1:以前の移行に復元する

以前のポイントにデータベーススキーマを復元するには、以下を使用します。

Update-Database TargetMigration: <name of last good migration>

最後の正常な移行を指定します。 まだ移行を適用していない場合は、この部分をスキップできます。

データベースに適用されている移行名のリストを取得するには、Get-Migrationsコマンドを使用します。

PM> Get-Migrations
Retrieving migrations that have been applied to the target database.
201508242303096_Bad_Migration
201508211842590_The_Migration_applied_before_it
201508211440252_And_another

このリストには、適用された最新の移行が最初に表示されます。 ダウングレードするグループ、つまりダウングレードするグループの前に適用されているグループのリストの後ろにある移行を選択します。

Update-Database TargetMigration: "<the migration applied before it>"

指定した移行後に適用されるすべての移行は、最初に適用された最新の移行から順番にダウングレードされます。

手順2:プロジェクトからの移行を削除する

これで、EFプロジェクトのMigrationsフォルダから悪いマイグレーションを削除できます。

リセット update database

C#で私のプロジェクトにEF 6.0を使用しています。手動の移行と更新があります。 私はデータベース上で約5回のマイグレーションを行っていますが、最後のマイグレーションが悪いことに気がつきました。 以前の移行にロールバックすることはできますが、新しい(固定)移行を追加してUpdate-Databaseを実行すると、悪い移行が適用されても適用されます。

以前の移行にロールバックし、悪い移行でファイルを削除しようとしていました。 しかし、新しいマイグレーションを追加しようとすると、マイグレーションファイルが破損しているため、データベースを更新するときにエラーが発生します(具体的には、最初の行のコードはテーブルAの名前をBに変更し、次の行です。名前A - 多分EFバグです)。

私が実行できるクエリがいくつかあります。これはEFに「それが決して存在しなかったような最後のマイグレーションを忘れて、それは悪い」のようなものです。 Remove-Migrationのようなもの。

Edit1私に合った解決策を見つけました。 モデルを良い状態に変更し、 Add-Migration TheBadMigration -Forceを実行しますAdd-Migration TheBadMigration -Force 。 これにより、適用された移行ではなく最後のものが再構築されます。

とにかく、これはまだ元の質問に完全に答えるものではありません。 私がUpdateDatabaseを悪いマイグレーションにすると、悪いマイグレーションをロールバックして新しいマイグレーションを作成する方法がわかりませんでした。

ありがとう




まず、次のコマンドを使用して完全な移行を最後に更新します。

Update-Database TargetMigration

例:

Update-Database -20180906131107_xxxx_xxxx

そして、未使用の移行を手動で削除します。




Related