私は自分のマイグレーションをマックアップしました、私は最初のマイグレーションでIgnoreChanges
を使いました、しかし今私はすべての私のマイグレーションを削除し、そしてすべてのロジックでの最初のマイグレーションから始めたいです。
フォルダ内の移行を削除してAdd-Migration
を実行しようとすると、完全なファイルは生成されません(最後の移行以来変更は行われていないので削除されています)。
Disable-Migrationsコマンドはありますか。Enable-Migrations
を再実行できますか?
必要がある :
__MigrationHistory
テーブルを削除します(システムテーブルの下にある場合もあります)。それからパッケージマネージャコンソールで次のコマンドを実行します。
Enable-Migrations -EnableAutomaticMigrations -Force
-EnableAutomaticMigrations
の有無にかかわらず使用する
そして最後に、実行することができます:
Add-Migration Initial
問題:あなたはあなたのマイグレーションを潰してしまったので、あなたはあなたの既存のテーブルを削除せずにそれをリセットしたいと思います。
問題:EFが最初からテーブルを作成しようとしているため、データベース内の既存のテーブルでマイグレーションをリセットすることはできません。
何をすべきか:
Migrations_Historyテーブルから既存の移行を削除します。
Migrationsフォルダから既存の移行を削除します。
Add-migration Resetを実行します。これにより、移行フォルダにテーブルの作成を含む移行が作成されます(ただし、実行されないため、エラーは発生しません)。
EFが現在の状態のスナップショットを取得できるように、MigrationHistoryテーブルに最初の行を作成する必要があります。マイグレーションを適用すると、EFはこれを行います。ただし、テーブルはデータベースにすでに存在するため、作成したばかりの移行を適用することはできません。それで、Migrationに入り、 "Up"メソッドの中のすべてのコードをコメントアウトしてください。
それではupdate-databaseを実行してください。 (実際にはデータベースを変更しないで)Migrationを適用し、MigrationHistoryにスナップショット行を作成します。
これで移行はリセットされ、通常の移行を続けることができます。
どうですか?
Update-Database –TargetMigration: $InitialDatabase
パッケージマネージャコンソールで?すべての更新を初期の状態にリセットします。
これを修正するには、次のことが必要です。
移行フォルダ内のすべての* .csファイルを削除します。
データベース内の_MigrationHistoryテーブルを削除します。
Enable-Migrations -EnableAutomaticMigrations -Force
を実行する
Add-Migration Reset
を実行する
次に、public partial class Reset : DbMigration
クラスで、既存のテーブルと現在のテーブルをすべてコメント化する必要があります。
public override void Up()
{
// CreateTable(
// "dbo.<EXISTING TABLE NAME IN DATABASE>
// ...
// }
...
}
あなたがこのビットを見逃した場合、すべて失敗するでしょう、そして、あなたは再び始めなければなりません!
Update-Database -verbose
あなたが上記を正しくしたならば、これは成功するはずです、そして今、あなたは普通に続けることができます。
Entity Frameworkのコアです。
dotnet efデータベースドロップ-f -v
dotnet efの移行が初期を追加
dotnet efデータベースの更新
EntityFramework 6では、試してください。
Add-Migration Initial
初期移行ファイルを更新するため。
私の問題は、手動でMigrationsフォルダを削除したことです。内容をバックアップしたかったので、私はそれをしました、それで私は単にプロジェクトからフォルダーをドラッグしました。私は後で(バックアップコピーを作成した後で)それを元に戻し、そしてそれをソリューションエクスプローラでそれを右クリックしそしてポップアップメニューから削除を選択することによりMigrationsフォルダを削除することによって問題を解決した。
.NET CoreでEFを検索したときにこの問題がまだ発生することを考慮して、私はここに私の答えを投稿します(それが私をたくさん悩ませたので)。 EF 6 .NETバージョンには微妙な点がいくつかあります(最初のコマンドはありません。 "Snapshot"ファイルを削除する必要があります)。
(.NET Core 2.1でテスト済み)
手順は次のとおりです。
_efmigrationhistory
テーブルを削除します。ApplicationDbContextSnapshot.cs
、および削除などのファイル全体をソリューション全体で検索します。Add-Migration InitialMigration
を実行注意してください。すべてのスナップショットファイルを削除する必要があります。データベースを削除するだけで数え切れないほどの時間を費やしました...そうしないと、空の移行が発生します。
また、#3では、移行に名前を付けることができます。
ここにいくつかの追加のリソースがあります。 asp.net COREマイグレーションが空に生成されました
EF6では
Add-Migration Initial
を実行してください。この方法では__MigrationHistory
テーブルを削除する必要がないため、デプロイ時にデータベースに手を加える必要はありません。
Add-Migration ResetMigrations
を実行します。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()
{
}
}