web-dev-qa-db-ja.com

エンティティフレームワークの移行のリセット

私は自分のマイグレーションをマックアップしました、私は最初のマイグレーションでIgnoreChangesを使いました、しかし今私はすべての私のマイグレーションを削除し、そしてすべてのロジックでの最初のマイグレーションから始めたいです。

フォルダ内の移行を削除してAdd-Migrationを実行しようとすると、完全なファイルは生成されません(最後の移行以来変更は行われていないので削除されています)。

Disable-Migrationsコマンドはありますか。Enable-Migrationsを再実行できますか?

284
Todd

必要がある :

  1. 状態を削除します。プロジェクト内のmigrationsフォルダーを削除します。そして
  2. データベース内の__MigrationHistoryテーブルを削除します(システムテーブルの下にある場合もあります)。それから
  3. パッケージマネージャコンソールで次のコマンドを実行します。

    Enable-Migrations -EnableAutomaticMigrations -Force
    

    -EnableAutomaticMigrationsの有無にかかわらず使用する

  4. そして最後に、実行することができます:

    Add-Migration Initial
    
422
Todd

問題:あなたはあなたのマイグレーションを潰してしまったので、あなたはあなたの既存のテーブルを削除せずにそれをリセットしたいと思います。

問題:EFが最初からテーブルを作成しようとしているため、データベース内の既存のテーブルでマイグレーションをリセットすることはできません。

何をすべきか:

  1. Migrations_Historyテーブルから既存の移行を削除します。

  2. Migrationsフォルダから既存の移行を削除します。

  3. Add-migration Resetを実行します。これにより、移行フォルダにテーブルの作成を含む移行が作成されます(ただし、実行されないため、エラーは発生しません)。

  4. EFが現在の状態のスナップショットを取得できるように、MigrationHistoryテーブルに最初の行を作成する必要があります。マイグレーションを適用すると、EFはこれを行います。ただし、テーブルはデータベースにすでに存在するため、作成したばかりの移行を適用することはできません。それで、Migrationに入り、 "Up"メソッドの中のすべてのコードをコメントアウトしてください。

  5. それではupdate-databaseを実行してください。 (実際にはデータベースを変更しないで)Migrationを適用し、MigrationHistoryにスナップショット行を作成します。

これで移行はリセットされ、通常の移行を続けることができます。

141
Greg Gum

どうですか?

Update-Database –TargetMigration: $InitialDatabase

パッケージマネージャコンソールで?すべての更新を初期の状態にリセットします。

参照リンク: コードの最初の移行 - 特定のバージョンへの移行(ダウングレードを含む)

27
Chris Voon

これを修正するには、次のことが必要です。

  1. 移行フォルダ内のすべての* .csファイルを削除します。

  2. データベース内の_MigrationHistoryテーブルを削除します。

  3. Enable-Migrations -EnableAutomaticMigrations -Forceを実行する

  4. Add-Migration Resetを実行する

次に、public partial class Reset : DbMigrationクラスで、既存のテーブルと現在のテーブルをすべてコメント化する必要があります。

public override void Up()
{
// CreateTable(
// "dbo.<EXISTING TABLE NAME IN DATABASE>
// ...
// }
...
}

あなたがこのビットを見逃した場合、すべて失敗するでしょう、そして、あなたは再び始めなければなりません!

  1. 今すぐ実行Update-Database -verbose

あなたが上記を正しくしたならば、これは成功するはずです、そして今、あなたは普通に続けることができます。

16
Rusty Nail

Entity Frameworkのコアです。

  1. Migrationsフォルダーからすべてのファイルを削除します。
  2. コンソールに入力

dotnet efデータベースドロップ-f -v

dotnet efの移行が初期を追加

dotnet efデータベースの更新

2
Liam Kernighan

EntityFramework 6では、試してください。

Add-Migration Initial

初期移行ファイルを更新するため。

2
Asaf

私の問題は、手動でMigrationsフォルダを削除したことです。内容をバックアップしたかったので、私はそれをしました、それで私は単にプロジェクトからフォルダーをドラッグしました。私は後で(バックアップコピーを作成した後で)それを元に戻し、そしてそれをソリューションエクスプローラでそれを右クリックしそしてポップアップメニューから削除を選択することによりMigrationsフォルダを削除することによって問題を解決した。

2
user1738579

.NET CoreでEFを検索したときにこの問題がまだ発生することを考慮して、私はここに私の答えを投稿します(それが私をたくさん悩ませたので)。 EF 6 .NETバージョンには微妙な点がいくつかあります(最初のコマンドはありません。 "Snapshot"ファイルを削除する必要があります)。

(.NET Core 2.1でテスト済み)

手順は次のとおりです。

  1. _efmigrationhistoryテーブルを削除します。
  2. 名前全体にスナップショットを含むファイル(ApplicationDbContextSnapshot.cs、および削除などのファイル全体をソリューション全体で検索します。
  3. Add-Migration InitialMigrationを実行

注意してください。すべてのスナップショットファイルを削除する必要があります。データベースを削除するだけで数え切れないほどの時間を費やしました...そうしないと、空の移行が発生します。

また、#3では、移行に名前を付けることができます。

ここにいくつかの追加のリソースがあります。 asp.net COREマイグレーションが空に生成されました

Entity Framework 7の移行をリセットする

2
Jose A

EF6では

  1. 'migrations'フォルダ内のすべてのファイルを削除してください。
  2. データベースを削除します。
  3. Add-Migration Initialを実行してください。
  4. これで、 'update-database'を実行でき、すべてうまくいくでしょう。
1
adudley

この方法では__MigrationHistoryテーブルを削除する必要がないため、デプロイ時にデータベースに手を加える必要はありません。

  1. Migrationsフォルダから既存の移行を削除します。
  2. パッケージマネージャコンソールでAdd-Migration ResetMigrationsを実行します。
  3. Up()メソッドの移行履歴をきれいにします。
/// <summary>
/// Reset existing migrations by cleaning the __MigrationHistory table
/// and creating a new initial migration with the current model snapshot.
/// </summary>
public partial class ResetMigrations : DbMigration
{
    public override void Up()
    {
        Sql("DELETE FROM [dbo].[__MigrationHistory]");
    }

    public override void Down()
    {
    }
}