Résoudre l'erreur "Entité supplémentaire" causée par le conflit de clé principale dans ASP.NET MVC
Dans ASP.NET MVC, lorsque le modèle d'édition est mis à jour en "modifié", une erreur peut être rencontrée: "L'entité avec le type supplémentaire de 'ModelName' a échoué la même valeur de clé primaire". Cette erreur s'est produite lorsque l'entité à mettre à jour existe dans le registre de suivi qui existe dans le contexte.
Dans le scénario donné, l'erreur est jetée dans le voyage suivant:
Analyse des erreurs:
<code class="language-csharp">db.Entry(aViewModel.a).State = EntityState.Modified;</code>
Le problème provient du fonctionnement edit (get)
du contrôleur, qui charge l'entité à modifier. Dans cette opération, les méthodesessaient de vérifier l'accès des utilisateurs par des entités de chargement indépendantes. Depuis lors, l'entité est placée dans l'état de séparation. Solution:
Afin de résoudre le conflit, la méthodeCanuserAccessa doit être modifiée pour garantir que l'entité n'est pas suivie dans le contexte de la requête. Cela peut être réalisé en appelant la méthode , comme indiqué ci-dessous:
Explication:
.AsNoTracking()
En utilisant , l'entité ne sera pas suivie par contexte lors du chargement. Cela empêche les mises à jour ultérieures de contradiction avec l'état de séparation.
<code class="language-csharp">private bool canUserAccessA(int aID) { int userID = WebSecurity.GetUserId(User.Identity.Name); int aFound = db.Model.AsNoTracking().Where(x => x.aID == aID && x.UserID==userID).Count(); return (aFound > 0); //如果 aFound > 0,则返回 true,否则返回 false。 }</code>
Erreur "L'échec de l'entité du type supplémentaire est" ModelName "..." peut se produire lorsque l'entité à mettre à jour a été suivie par le contexte. Afin de résoudre ce conflit, il est nécessaire de s'assurer que toute entité de chargement indépendante est désactivée et le suivi, comme la méthode modifiée
CanuserAccessa. .AsNoTracking()
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!