リポジトリからのASP.NET Core Web App + SQLのデプロイ

asp.net-core azure c# entity-framework-core sql-server

質問

このチュートリアルでは、 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のシードデータを処理する必要があります。



Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ