Maison > développement back-end > C++ > ASP.NET MVC: Comment résoudre les erreurs 'de fixer une entité échouée' en due à des clés primaires en double?

ASP.NET MVC: Comment résoudre les erreurs 'de fixer une entité échouée' en due à des clés primaires en double?

Linda Hamilton
Libérer: 2025-01-30 07:56:09
original
656 Les gens l'ont consulté

ASP.NET MVC: How to Solve

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>
Copier après la connexion

Le problème provient du fonctionnement edit (get)

du contrôleur, qui charge l'entité à modifier. Dans cette opération, les méthodes CanuserAccessa

essaient 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éthode

CanuserAccessa 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>
Copier après la connexion
Conclusion:

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!

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