Entity Framework Core : Résolution de "Une deuxième opération démarrée sur ce contexte avant qu'une opération précédente ne soit terminée"
Le message d'erreur "Une deuxième opération démarré sur ce contexte avant la fin d'une opération précédente" dans Entity Framework Core indique généralement que plusieurs threads tentent d'accéder simultanément à la même instance DbContext. Cela peut se produire lorsque DbContext est enregistré en tant que service étendu, ce qui crée une nouvelle instance pour chaque requête.
Portée de l'enregistrement DbContext
Par défaut, Entity Framework Core enregistre le DbContext en tant que service étendu. Cela signifie qu'une nouvelle instance de DbContext est créée pour chaque requête HTTP ou service étendu. Dans un environnement multithread, cela peut conduire au message d'erreur en question.
Enregistrement transitoire de DbContext
Pour résoudre ce problème, il est recommandé d'enregistrer le DbContext en tant que service transitoire. Cela garantit qu'une nouvelle instance est créée pour chaque gestionnaire de requêtes individuel :
services.AddTransient<MyContext>();
Vous pouvez également utiliser ServiceLifetime.Transient :
services.AddDbContext<MyContext>(ServiceLifetime.Transient);
Inconvénients de l'enregistrement transitoire
Enregistrer le DbContext comme transitoire a ses inconvénients. Les entités gérées par le contexte ne peuvent pas être conservées dans plusieurs appels de méthode ou classes qui utilisent la même instance DbContext.
Autres causes potentielles
En plus de l'enregistrement transitoire de DbContext, d'autres Les causes potentielles de l'erreur incluent :
Informations supplémentaires
Pour plus de détails sur la durée de vie et le fil de discussion de DbContext sécurité, reportez-vous à la documentation Entity Framework Core :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!