質問: このチュートリアルでは、 Visual Studioを使用してASP.NET CoreとEntity Framework Coreを開始する作業を行っています.GitHubリポジトリからAzureに展開したいと思います。 Azureで「Web App + SQL」を使用すると、一度正常にデプロイできますが、データベースを変更して再デプロイすると、「既存のマイグレーションを適用するとこの問題は解決する可能性があります...」というエラーが表示されます。 それで、新しいマイグレーションがある状態でアプリケーションを再デプロイすると、データベースの更新を引き起こす方法がありますか? ちょっとメモしておきますが、このようなアプリをVisual Studioから直接配備して管理する方法はありますが、リポジトリから行う方法を学びたいと思います。 注:私はこの似たような質問を見つけました`DbInitializer.Initialize(context);`下の`DbInitializer.Initialize(context);` Configureメソッドに`context.Database.Migrate()`を追加しようとしました`DbInitializer.Initialize(context);`これは私のマシン上で実行したときに問題を引き起こすことはありませんでしたが、私はそれを展開したときに "500 Internal Server Error:アプリケーションの起動中にエラーが発生しました。"
回答: > 私はcontext.Database.Migrate()をDbInitializer.Initialize(コンテキスト)の下にあるStartup.csのConfigureメソッドに追加しようとしました。これは私のマシン上で実行したときに問題を引き起こすことはありませんでしたが、私はそれを展開したときに "500 Internal Server Error:アプリケーションの起動中にエラーが発生しました。" > > あなたの説明によると、私はあなたがこの問題をテストするために言及したようにチュートリアルに従った。このセクションに `DbInitializer.cs`を追加し、 `DbInitializer.cs` Configureメソッドの`context.Database.Migrate()`を次のように`Startup.cs`します。 ``` DbInitializer.Initialize(context); context.Database.Migrate(); ``` 私はStudentクラスの`IdNo`という名前の新しいプロパティを追加し、Webアプリケーションを開始しました。次のエラーが発生する可能性があります。 !ここに画像の説明を入力 **注:** `Students`テーブルにレコードがない場合、 `DbInitializer.cs`がフィードレコードを追加すると、上記のエラーが発生します。 `DatabaseFacade.EnsureCreated()`および`DatabaseFacade.Migrate()`の概要は次のとおりです。 **DatabaseFacade.EnsureCreated()** > **コンテキストのデータベースが存在することを保証します。存在する場合、何も実行されません** 。存在しない場合、データベースとそのすべてのスキーマが作成されます。データベースが存在する場合、このコンテキストのモデルと互換性があることを確認するための努力は行われません。 **このAPIは、データベースを作成するために移行を使用しないことに注意してください** 。また、作成されたデータベースは、移行を使用して後で更新することはできません。 **リレーショナルデータベースを対象とし、移行を使用する場合は、DbContext.Database.Migrate()**メソッドを使用してデータベースが作成され、すべての移行が適用されることを確認**できます** 。 > > **DatabaseFacade.Migrate()** > **コンテキストの保留中の移行をデータベースに適用します。データベースがまだ存在しない場合は作成します。** **このAPIは、DbContext.Database.EnsureCreated()と相互排他的**です。 EnsureCreatedは、データベースを作成するために移行を使用しないため、作成されたデータベースは、移行を使用して後で更新することはできません。 > > シナリオに基づいて、移行機能を活用してデータベーススキーマを更新する必要があります。私が知っているように、EFコアは自動マイグレーションをサポートしていません。あなたはこのようなケースとこのgitの問題に従うことができます。 `DbInitializer.cs` `context.Database.Migrate()`代わりに`context.Database.EnsureCreated()`を`DbInitializer.cs` 、手動で追加ファイルを`add-migration` 、作成した移行ファイルをGitHubリポジトリにコミットすることができます。 !ここに画像の説明を入力 **注:**同じレコードを挿入しないように、 `DbInitializer.cs`のシードデータを処理する必要があります。