Maison > développement back-end > C++ > Comment résoudre les conflits clés de l'entité lors de la modification des entités dans ASP.NET MVC?

Comment résoudre les conflits clés de l'entité lors de la modification des entités dans ASP.NET MVC?

Linda Hamilton
Libérer: 2025-01-30 08:01:09
original
520 Les gens l'ont consulté

How to Resolve Entity Key Conflicts When Editing Entities in ASP.NET MVC?

Dépannage Les conflits de clés de l'entité dans ASP.NET MVC ENTITY MISE À JOUR

Lors de la mise à jour des entités dans ASP.NET MVC via les demandes de publication, vous pouvez rencontrer l'erreur suivante:

<code>Attaching an entity of type 'MODELNAME' failed because another entity of the same type already has the same primary key value.</code>
Copier après la connexion

Cette erreur découle de la tentative de joindre une entité au DbContext tandis qu'une autre entité avec la clé primaire identique existe déjà dans le graphique d'objet du contexte. Le DbContext essaie de fusionner les entités, entraînant un conflit.

Scénario et cause racine

Imaginez modifier une entité «A» dans un contrôleur. L'action Get utilise Find() pour charger l'entité. L'action de la publication tente ensuite de la joindre et de la mettre à jour. Cependant, si une autre entité «A» avec la même clé primaire est chargée ailleurs (par exemple, pendant la validation d'accès aux utilisateurs), cela crée un conflit de suivi.

Résolution en utilisant AsNoTracking()

La solution la plus efficace consiste à empêcher le DBContext de suivre l'entité utilisée pour la validation. Utilisez la méthode AsNoTracking():

<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);
}</code>
Copier après la connexion

AsNoTracking() s'assure que l'entité de validation n'interfère pas avec la mise à jour de l'entité.

Alternative: la Méthode Detach()

Une autre approche consiste à détacher l'entité de la DbContext avant la modification en utilisant la méthode Detach(). Cela empêche le suivi des conflits. Cependant, sachez que le détachement peut avoir un impact sur d'autres parties de votre code, alors considérez soigneusement ses implications avant d'implémenter cette solution.

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