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
.
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.