Dépannage "Entité de connexion avec la clé primaire en double" Erreurs dans ASP.NET MVC
Les applications MVC ASP.NET à l'aide de l'entité Framework peuvent lancer l'erreur: "La connexion d'une entité de type 'ModelName' a échoué car une autre entité du même type a déjà la même valeur de clé principale." Cela se produit généralement lors d'une opération de poste lors de la tentative de mise à jour d'une entité. Explorons les causes et les solutions courantes.
Problème 1: Entité détachée
L'entité peut être détachée du contexte du cadre de l'entité, l'empêchant de reconnaître les mises à jour. Pour résoudre ce problème, reattachez l'entité à l'aide de la méthode Attach()
avant Définition de son état sur Modified
.
Problème 2: Modifications de la base de données simultanées
Plusieurs utilisateurs ou processus accès simultanément à la base de données peuvent entraîner des conflits. Avant de mettre à jour, actualisez l'entité de la base de données pour vous assurer que vous travaillez avec la dernière version.
Problème 3: Validation ou contrôle d'accès conflictuel
La logique de validation ou de contrôle d'accès personnalisée peut modifier involontairement l'état de l'entité. Si ces vérifications chargent l'entité avant la définition de l'état Modified
, cela pourrait provoquer un détachement. Passez soigneusement cette logique pour éliminer les interférences.
Problème 4: Problèmes de contrôleur asynchrones
Les actions de contrôleur asynchrones peuvent créer des problèmes de concurrence. Utilisez le mot-clé await
pour vous assurer que les modifications des données se terminent avant de procéder, en évitant les conflits.
Exemple de scénario et de solution:
Un exemple a montré l'erreur résultant d'une fonction personnalisée (canUserAccessA()
) qui a chargé l'entité avant la mise à jour. La solution consistait à utiliser .AsNoTracking()
dans la fonction pour empêcher le cadre d'entité de suivre l'entité, résolvant ainsi le conflit.
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!