web-dev-qa-db-fra.com

AddDbContext ou AddDbContextPool

Pour les applications Asp.net Core, laquelle devons-nous utiliser? AddDbContext ou AddDbContextPool? Selon la documentation d'EF Core, AddDbContextPool fournit des performances élevées, mais les modèles de projet Asp.net Core par défaut utilisent AddDbContext.

25

La réponse est la suivante (sous "Pooling DbContext"): https://docs.Microsoft.com/en-us/ef/core/what-is-new/ef-core-2.0#dbcontext-pool

DbContext n'est pas thread-safe. Vous ne pouvez donc pas réutiliser le même objet DbContext pour plusieurs requêtes en même temps (des choses étranges se produisent). La solution habituelle consiste à créer un nouvel objet DbContext chaque fois que vous en avez besoin. C'est ce que AddDbContext fait.

Cependant, la réutilisation d'un objet DbContext après une requête précédente n'a rien d'anormal. C'est ce que AddDbContextPool fait. Il maintient en vie plusieurs objets DbContext et vous en donne un non utilisé au lieu d'en créer un à chaque fois.

Lequel vous utilisez est à vous. Les deux vont marcher. Le pooling apporte des gains de performances. Cependant, la documentation vous avertit que si vous utilisez des propriétés privées dans votre classe DbContext qui ne doivent pas être partagées entre des requêtes, vous ne devez pas les utiliser. J'imagine que c'est plutôt rare, alors la mise en commun devrait être appropriée dans la plupart des cas.

41
Gabriel Luci