どこにDatabase.EnsureCreatedを配置する必要がありますか?

asp.net c# entity-framework-core

質問

私はEntity Framework Core + ASP.NET Coreアプリケーションを持っています。アプリケーションが起動すると、データベースが作成され、最終的に(一度マイグレーションが完了したら)、それらも実行されていることを確認します。

当初、私は入れDatabase.EnsureCreated()私のコンストラクタにDbContextそれはの新しいインスタンスので、誰かが自分のアプリケーションを打つたびに実行するように見えるDbContextするたびに作成されます。

私はそれを私のスタートアップコードに入れようとしましたが、 DbContextを行うには私のDbContextインスタンスが必要で、それをどうやって取得するのかははっきりしていません。私はEFを次のように設定しています:

serviceCollection.AddEntityFramework()
    .AddSqlServer()
    .AddDbContext<Models.MyContext>(options => options.UseSqlServer(...));

私は、サービスコレクションからDbContextのインスタンスを取得する方法を見ていないし、DbContextを挿入するための適切なシングルトンが表示されないので、一度の初期化を行うことができます。

だから、私のDbContextに関連するコードをアプリケーションごとに一度呼び出すのに最適な場所は何ですか?

人気のある回答

とにかくあなたのサービスの一環としてEnsureCreatedを実行するためにあなたが走る理由は不思議です。あなたが本当にあなたのウェブサーバは、データベーススキーマを作成または更新しますか?なぜデータベースが最新でない場合、Webサーバーが稼働していて、要求を処理するのですか?

あなたは本当にあなたのマイグレーションを信用していますので、実行後にデータを破壊しないように、実行後にデータをテストする必要はありませんか?

さらに、Webサーバーデータベースにデータベーススキーマを変更する権限を与える必要があります。これは脆弱性そのものです。あなたのウェブサーバーを引き継いでいる人は、あなたのデータベーススキーマを変更することができます。

データベースを作成し、マイグレーションを小さなユーティリティで適用することをお勧めします。これは、Webアプリケーションの一部ではなく、自分で実行します。



Related

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