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
クラスでプライベートプロパティを使用する場合は、使用しないでくださいと警告されています。しかし、それは非常にまれだと思うので、ほとんどの場合、プーリングが適切です。