1. ホーム
  2. asp.net-core

AddDbContext または AddDbContextPool

2023-09-20 02:40:43

質問

Asp.net Coreアプリでは、どちらを使用しなければならないのでしょうか? AddDbContext または AddDbContextPool ? EF Coreのドキュメントによると AddDbContextPool は高いパフォーマンスを提供しますが、デフォルトのAsp.net Coreプロジェクトのテンプレートは AddDbContext .

どのように解決するのですか?

答えはこちら("DbContext pooling"の下)です。 https://docs.microsoft.com/en-us/ef/core/what-is-new/ef-core-2.0#dbcontext-pooling

DbContext はスレッドセーフではありません。そのため、同じ DbContext オブジェクトを同時に複数のクエリで使用することはできません (おかしなことが起こります)。これに対する通常の解決策は、単に新しい DbContext オブジェクトを作成することでした。これは AddDbContext が行うことです。

を再利用することは悪いことではありません。 DbContext オブジェクトを再利用することは問題ありません。それは AddDbContextPool が行うことです。これは複数の DbContext オブジェクトを生かし、毎回新しいものを作成するのではなく、未使用のものを提供します。

どちらを使うかはあなた次第です。どちらも機能します。プーリングは若干のパフォーマンス向上があります。ただし、ドキュメントでは DbContext クラスでプライベートなプロパティを使用していて、 クエリ間で共有されていない場合は、それを使用しないようにとの警告があります。しかし、それはかなりまれなことだと思いますので、ほとんどの場合、プーリングは適切であると思われます。