Featured image of post EF Core : AddDbContext vs AddDbContextFactory vs AddDbContextPool

EF Core : AddDbContext vs AddDbContextFactory vs AddDbContextPool

Entity Framework Core (EFCore) ( je vous mets le lien ici ) offre plusieurs méthodes pour enregistrer et configurer le DbContext dans le conteneur d’injection de dépendance. Ces méthodes sont :

  • AddDbContext
  • AddDbContextFactory
  • AddDbContextPool

Chacune de ces méthodes a ses propres avantages et inconvénients en fonction de l’application ou du scénario que vous aurez choisi.

AddDbContext

La méthode AddDbContext est utilisée pour enregistrer le DbContext dans le conteneur d’injection de dépendance. En gros à chaque fois qu’une instance de DbContext est demandée, une nouvelle instance est créée. C’est en général la méthode la plus courante pour enregistrer DbContext et elle est généralement utilisée dans les applications ASP.NET Core. Cependant, cette méthode peut être inefficace dans les scénarios où de nombreuses instances de DbContext sont créées et détruites, car chaque instance de DbContext est assez coûteuse à créer.

services.AddDbContext<MyDbContext>(options =>
    options.UseSqlServer(DummySqlCnx));

AddDbContextPool

La méthode AddDbContextPool a été introduite dans EFCore 2.0 pour améliorer les performances en réutilisant les instances de DbContext. Au lieu de créer une nouvelle instance de DbContext chaque fois qu’une est demandée, AddDbContextPool conserve un “pool” d’instances de DbContext qui peuvent être réutilisées (En gros, plusieurs dbcontext sont mis a disposition de l’application) . Lorsqu’une instance de DbContext est renvoyée au pool, son state est réinitialisé, ce qui permet de la réutiliser pour une autre requête.

services.AddDbContextPool<MyDbContext>(options => options.UseSqlServer(DummySqlCnx));

AddDbContextFactory

La dernière méthode (Perso je n’ai jamais eu l’occaz d’y avoir recours) AddDbContextFactory a été introduite un peu plus tard, dans EFCore 5.0. Elle est utilisée pour enregistrer une fabrique qui peut créer des instances de DbContext. Cette méthode est utile dans les scénarios où le DbContext doit être créé explicitement et le cycle de vie doit être contrôlé a la mano. C’est généralement le cas dans les applications de type Blazor Server et les applications avec une longue durée de vie, où le DbContext doit être géré sur une base par méthode plutôt que sur une base par requête

services.AddDbContextFactory<MyDbContext>(options =>
    options.UseSqlServer(DummySqlCnx));

En Conclusion…

Le choix entre AddDbContext, AddDbContextPool et AddDbContextFactory dépend du scénario spécifique de l’application.

  • AddDbContext est le choix par défaut pour la plupart des applications ASP.NETCore.
  • AddDbContextPool peut être utilisé pour améliorer les performances en réutilisant les instances de DbContext.
  • AddDbContextFactory est utile dans les scénarios où le cycle de vie de DbContext doit être contrôlé manuellement.