web-dev-qa-db-ja.com

AddDbContextまたはAddDbContextPool

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

41
Gabriel Luci