私は私のマイグレーションをマックアップしました、私は使用しました IgnoreChanges
ました。最初の移行でましたが、すべての移行を削除して、すべてのロジックした初期移行から始めたいと思います。
フォルダー内の移行を削除して試してAdd-Migration
も、完全なファイルが生成されない場合(空です-最後から変更を加えていないため、現在は移行を削除しています)。
あらゆるあります無効に-移行コマンドは、ので、私は再実行することができますかEnable-Migrations
?
私は私のマイグレーションをマックアップしました、私は使用しました IgnoreChanges
ました。最初の移行でましたが、すべての移行を削除して、すべてのロジックした初期移行から始めたいと思います。
フォルダー内の移行を削除して試してAdd-Migration
も、完全なファイルが生成されない場合(空です-最後から変更を加えていないため、現在は移行を削除しています)。
あらゆるあります無効に-移行コマンドは、ので、私は再実行することができますかEnable-Migrations
?
回答:
必要がある :
__MigrationHistory
データベースのテーブルを削除します(システムテーブルの下にある場合があります)。その後パッケージマネージャーコンソールで次のコマンドを実行します。
Enable-Migrations -EnableAutomaticMigrations -Force
の有無にかかわらず使用 -EnableAutomaticMigrations
そして最後に、実行できます:
Add-Migration Initial
問題:移行をマックアップし、既存のテーブルを削除せずに移行をリセットしたい。
問題:EFは最初からテーブルを作成する必要があるため、データベース内の既存のテーブルを使用して移行をリセットできません。
何をすべきか:
Migrations_Historyテーブルから既存のマイグレーションを削除します。
移行フォルダから既存の移行を削除します。
add-migration Resetを実行します。これにより、テーブルの作成を含むMigrationフォルダーに移行が作成されます(ただし、実行されないため、エラーは発生しません)。
次に、EFが現在の状態のスナップショットを取得できるように、MigrationHistoryテーブルに最初の行を作成する必要があります。移行を適用すると、EFがこれを行います。ただし、テーブルがデータベースにすでに存在するため、作成した移行を適用することはできません。それで、Migrationに入り、 "Up"メソッド内のすべてのコードをコメント化してください。
次にupdate-databaseを実行します。Migrationを適用し(実際にはデータベースを変更しません)、MigrationHistoryにスナップショット行を作成します。
これで移行がリセットされ、通常の移行を続行できます。
いかがですか
Update-Database –TargetMigration: $InitialDatabase
パッケージマネージャーコンソールで?すべての更新を非常に初期の状態にリセットする必要があります。
これを修正するには、次のことを行う必要があります。
Migrationsフォルダー内のすべての* .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
上記を正しく実行した場合、これは成功するはずです。これで、通常どおり続行できます。
これが.NET CoreでEFを検索するときに依然として表示されることを考慮して、ここに私の回答を投稿します(それは私を悩ませてきたためです)。EF 6 .NETバージョンにはいくつかの微妙な点があることに注意してください(最初のコマンドはなく、「スナップショット」ファイルを削除する必要があります)
(.NET Core 2.1でテスト済み)
手順は次のとおりです。
_efmigrationhistory
テーブルを削除し ます。ApplicationDbContextSnapshot.cs
を削除します。Add-Migration InitialMigration
注意: スナップショットファイルはすべて削除する必要があります。。データベースを削除するだけで数え切れないほどの時間を費やしました...これを行わないと、空の移行が生成されます。
また、#3では、移行に任意の名前を付けることができます。
ここにいくつかの追加リソースがあります: asp.net CORE Migration生成された空
この方法では__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()
{
}
}
Net Core 3.0の場合:
移行をリセットする方法が見つからなかった。
また、移行がうまくいかないという問題にも遭遇し、ここで提供された回答がうまくいきませんでした。私は.Net Core 3.0 Web APIを使用しており、先月のどこかでデータベースを直接編集しました。はい、私は悪い、悪いことをしました。
ここで提案されている戦略により、パッケージマネージャーコンソールでいくつかのエラーが発生しました。
確かに、私は一歩逃したか、正しいファイルを消去することに失敗した可能性がありますが、あまり力ずくでこれをクリーンアップする方法があることがわかりました。
空のデータベースでWeb APIを起動すると、エンティティモデルに一致するすべてのテーブルとプロパティが正しく作成されるようになりました。
HTH!