質問: Asp.netのコアアプリケーションの場合、どちらを使う必要がありますか? `AddDbContext`または`AddDbContextPool` ? EF Coreのドキュメントによれば、 `AddDbContextPool`は高性能を提供しますが、デフォルトのAsp.net Coreプロジェクトテンプレートは`AddDbContext`使用し`AddDbContext` 。
回答: 答えはこちら(「DbContextプーリング」の下)です。 `DbContext`はスレッドセーフではありません。そのため、同じ`DbContext`オブジェクトを複数のクエリに同時に再利用することはできません(奇妙なことが起こります)。これに対する通常の解決策は、必要になるたびに新しい`DbContext`オブジェクトを作成することです。それが`AddDbContext`動作です。 ただし、前のクエリが既に完了した後に`DbContext`オブジェクトを再利用することに問題はありません。それが`AddDbContextPool`動作です。複数の`DbContext`オブジェクトを存続させ、 `DbContext`オブジェクトを作成するのではなく、未使用のオブジェクトを提供します。 どちらを使うかはあなた次第です。両方ともうまくいきます。プールによってパフォーマンスが向上します。ただし、 `DbContext`クラスでクエリ間で共有してはいけないプライベートプロパティを使用する場合は、使用しないでください。それは非常にまれですが、ほとんどの場合プールが適切であるはずです。