340

移行を台無しにしてIgnoreChanges、最初の移行で使用しましたが、今度はすべての移行を削除して、すべてのロジックを使用した最初の移行から始めたいと思います。

フォルダ内の移行を削除してみAdd-Migrationたところ、完全なファイルが生成されません(最後の移行以降、変更を加えていないため、空です)。

Disable-Migrationsコマンドがあるので、再実行できますEnable-Migrationsか?

4

15 に答える 15

487

必要がある :

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

    Enable-Migrations -EnableAutomaticMigrations -Force
    

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

  4. そして最後に、実行できます。

    Add-Migration Initial
    
于 2012-07-26T23:15:46.583 に答える
173

問題:移行を台無しにして、既存のテーブルを削除せずにリセットしたいと考えています。

問題:EFはテーブルを最初から作成する必要があるため、データベース内の既存のテーブルを使用して移行をリセットすることはできません。

何をすべきか:

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

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

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

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

  5. 次に、update-databaseを実行します。(実際にはデータベースを変更せずに)移行を適用し、MigrationHistoryにスナップショット行を作成します。

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

于 2014-03-17T10:26:38.443 に答える
30

どうですか

Update-Database –TargetMigration: $InitialDatabase

パッケージマネージャーコンソールで?すべての更新を非常に初期の状態にリセットする必要があります。

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

于 2014-04-03T16:39:17.770 に答える
19

これを修正するには、次のことを行う必要があります。

  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

上記を正しく実行すれば、これは成功するはずです。これで、通常どおり続行できます。

于 2017-03-14T09:12:41.870 に答える
18

EntityFrameworkCoreで。

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

  2. コンソールに入力

    dotnet ef database drop -f -v
    dotnet ef migrations add Initial
    dotnet ef database update
    
  3. (またはパッケージマネージャーコンソールの場合)

    Drop-Database -Force -Verbose
    Add-Migration Initial
    Update-Database
    

UPD:現在の永続データを気にしない場合にのみ実行してください。もしそうなら、グレッグガムの答えを使用してください

于 2018-08-05T08:29:45.580 に答える
10

.NET CoreでEFを検索すると、これがまだ表示されることを考慮して、ここに回答を投稿します(これは、私を悩ませてきたためです)。EF 6 .NETバージョンには微妙な点があることに注意してください(初期コマンドはありません。「スナップショット」ファイルを削除する必要があります)

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

手順は次のとおりです。

  1. テーブルを削除し _efmigrationhistoryます。
  2. ソリューション全体で、名前にスナップショットが含まれているファイル(など)を検索し、それらApplicationDbContextSnapshot.cs削除します。
  3. ソリューションを再構築する
  4. 走るAdd-Migration InitialMigration

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

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

いくつかの追加リソースは次のとおりです 。asp.netCORE移行は空で生成されます

EntityFramework7の移行をリセットする

于 2018-09-25T22:52:11.377 に答える
4

Migrationsフォルダを削除してCleanからRebuild、プロジェクトを削除します。これは私のために働いた。Clean and Rebuildの前は、キャッシュされたメモリに移行がまだ存在していないため、移行はすでに存在していると言っていました。

于 2020-01-27T04:55:18.920 に答える
3

EntityFramework 6では、次のことを試してください。

Add-Migration Initial

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

于 2015-10-21T11:17:55.893 に答える
2

私の問題は、Migrationsフォルダーを手動で削除したことであることが判明しました。コンテンツをバックアップしたかったので、プロジェクトからフォルダをドラッグするだけでした。後で問題を修正しました(バックアップコピーを作成した後)。次に、ソリューションエクスプローラーで右クリックし、ポップアップメニューから[削除]を選択して、移行フォルダーを削除します。

于 2013-08-24T13:39:01.383 に答える
1

EF6では

  1. 'migrations'フォルダー内のすべてのファイルを削除します...ただし、'initialcreate'または'config'は削除しません。
  2. データベースを削除します。
  3. 次に実行しますAdd-Migration Initial
  4. これで、「データベースの更新」が可能になり、すべてがうまくいきます。
于 2015-11-12T21:53:53.227 に答える
1

この方法ではテーブルを削除する必要がない__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()
    {
    }
}
于 2018-11-23T11:51:18.990 に答える
0

Net Core 3.0の場合:

移行をリセットする方法を見つけることができませんでした。

また、移行の失敗で問題が発生しましたが、ここで提供されている回答はうまくいきませんでした。.Net Core 3.0 Web APIを使用しており、先月のどこかでデータベースを直接編集しました。はい、私は悪いことをしました。

ここで提案された戦略により、パッケージマネージャーコンソールで多くのエラーが発生しました。

  • その名前の移行はすでに存在します
  • スナップショットが見つかりませんでした
  • 「力」は認識されたパラメータではありません

確かに、私はステップを逃したか、正しいファイルをクリアするのを逃したかもしれませんが、それほど力を入れずにこれをクリーンアップする方法があることがわかりました:

  • 削除-名前による移行ごとに、作成の逆順で、壊れた移行までのPMCからの移行
  • 追加-新しい移行を作成するための移行。これは、最後の適切な移行から現在のスキーマまでのデルタになります。

これで、空のデータベースでWeb APIを起動すると、エンティティモデルに一致するすべてのテーブルとプロパティが正しく作成されます。

HTH!

于 2019-12-02T15:41:49.800 に答える
0

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

Add-Migration Initial -Context ApplicationDbContext

ApplicationDbContext =>あなたのコンテキスト。

ただし、既存のIDスキーマのみを更新する必要がある場合は、 https ://stackoverflow.com/a/59966100/4654957を試してください。

于 2020-03-31T02:02:28.330 に答える
0

VSC(Visual Studio Code)-.Net Core

1.状態を削除します。プロジェクトの移行フォルダーを削除します。

2.データベース内の__MigrationHistoryのレコードを削除します。

3.dotnet ef database drop -v次に、データベース'<your-database'をサーバー'。'にドロップしてもよろしいですか?(y / N)「N」と書く

4.dotnet efmigrationsはInitialを追加し、次に20211014110429_initialクラスのコードを__MigrationHistoryに書き込みます

于 2021-10-14T11:15:33.050 に答える
-2
Enable-Migrations -EnableAutomaticMigrations -Force
于 2016-08-13T09:50:28.190 に答える