質問: asp.netコアmvcサイトを運用しています。 DbInitializerはこのコードを使用していました: `await context.Database.EnsureCreatedAsync()` 今、私は移行が適用されていないことを知り、これを見てきました: > また、作成されたデータベースは、マイグレーションを使用して後で更新することはできません。 > > `await context.Database.MigrateAsync()`待機するようにコードを変更しましたが、移行が適用されておらず、データベースdbo .__ EFMigrationsHistoryにレコードが表示されません。 注:私のソリューションでは、Migrationsフォルダーに既に4つの移行クラスがありますが、それらはMigrationHistoryに追加されます。そのうちの3つが適用されたのは、データベースを再作成したためです(それでも、ensurecreatedを使用しています)。 「EnsureCreatedAsync」の前に使用したため、データが含まれているためデータベースを再作成しなかったため、最後の移行は適用されません。 データベースデータを失うことなく、既存のデータベースで移行を適用して使用を開始するにはどうすればよいですか?
回答: それは不可能であることがわかりました(うまくいけば私は間違っています)。 1. SSMSを使用してデータベースのバックアップを作成しました。 2. データを含むテーブルからデータベースのスクリプトを生成しました。 .sqlファイルにすべての挿入ステートメントがあるように。 3. データベースを削除し、新しい空のデータベースを作成し、セキュリティ(データベースユーザーの割り当て)に問題がないことを確認した 4. ビジュアルスタジオ、適用されなかったソリューションからすべての移行を削除。 5. シードデータをソリューションから削除しました(後でデータを戻すために.sqlスクリプトの挿入ステートメントと競合しないようにするため)。 6. Add-Migration Initialを実行して移行を再度有効化 7. 開発/デバッグデータベースでUpdate-Databaseを使用して移行を試した 8. ウェブサイトを公開し、ウェブサーバーで利用できるようにしました。 9. IISでWebサイトを開始し、SSMSですべてのテーブルが正しく作成され、_migrationhistoryに初期移行が含まれていることを確認しました 10. SSMSを開き、すべてのINSERTステートメントを持つ.sqlからクエリを実行します->すべてのデータが再度追加されました。 現在、私の(新しい)データベースでは移行が有効になっています。 *マイクロソフトのための万歳!*