Maison > développement back-end > C++ > Pourquoi mon application principale Entity Framework génère-t-elle une erreur « Deuxième opération démarrée » et comment puis-je la corriger ?

Pourquoi mon application principale Entity Framework génère-t-elle une erreur « Deuxième opération démarrée » et comment puis-je la corriger ?

Barbara Streisand
Libérer: 2025-01-03 16:51:39
original
806 Les gens l'ont consulté

Why Does My Entity Framework Core Application Throw a

Entity Framework Core : résolution de l'erreur « Deuxième opération démarrée » lors de l'exécution

Dans un problème récemment rencontré lors du développement avec ASP.Net Core 2.0 et Entity Framework Core, un une erreur s'est produite : "Une deuxième opération a démarré sur ce contexte avant qu'une opération précédente ne soit terminée." Cette exception, levée par InvalidOperationException, indique que plusieurs opérations ont été lancées sur le même contexte avant la fin de l'opération précédente.

En examinant la base de code, une méthode chargée de remplir une liste d'entités avec diverses propriétés et données associées a été identifiée comme coupable. La méthode problématique comprenait des requêtes pour incorporer des entités associées à l'aide d'instructions Include et mapper ces entités pour afficher des modèles.

Le problème sous-jacent était enraciné dans la manière dont DbContext était résolu et utilisé dans l'ensemble de l'application. Lors de l’utilisation d’IoC (Inversion of Control) pour l’injection de dépendances, le DbContext doit être enregistré comme Transient. Cela implique d'utiliser l'extrait de code suivant :

services.AddDbContext<MyContext>(ServiceLifetime.Transient);
Copier après la connexion

ou

services.AddTransient<MyContext>();
Copier après la connexion

au lieu de :

services.AddDbContext<MyContext>();
Copier après la connexion

Le comportement par défaut consiste à ajouter le DbContext tel que défini, ce qui peut entraîner des conflits lorsque plusieurs threads accèdent simultanément au contexte.

De plus, les opérations asynchrones et les expressions lambda asynchrones peuvent exacerber ce problème. L'utilisation de Transient pour DbContext accorde à chaque classe son instance, excluant toute modification d'une entité sur plusieurs classes.

Pour plus d'informations sur cette exception, reportez-vous à la ressource suivante : [https://docs.microsoft.com/en-us/ef/core/miscellaneous/warnings/second-operation-started](https://docs.microsoft.com/en-us/ef/core/miscellaneous/ avertissements/seconde opération démarrée)

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal