Heim > Backend-Entwicklung > C++ > Wie löste ich Entitätsschlüsselkonflikte bei der Bearbeitung von Unternehmen in ASP.NET MVC?

Wie löste ich Entitätsschlüsselkonflikte bei der Bearbeitung von Unternehmen in ASP.NET MVC?

Linda Hamilton
Freigeben: 2025-01-30 08:01:09
Original
474 Leute haben es durchsucht

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

Fehlerbehebung Entitätskonflikte in ASP.NET -MVC -Entitätsaktualisierungen

Wenn Sie Entitäten in ASP.NET MVC über Postanforderungen aktualisieren, können Sie den folgenden Fehler begegnen:

<code>Attaching an entity of type 'MODELNAME' failed because another entity of the same type already has the same primary key value.</code>
Nach dem Login kopieren

Dieser Fehler ergibt sich aus dem Versuch, eine Entität an das DbContext zu verbinden, während eine andere Entität mit dem identischen Primärschlüssel bereits im Objektdiagramm des Kontextes vorhanden ist. Das DbContext versucht, die Unternehmen zusammenzuführen, was zu einem Konflikt führt.

Szenario und Grundursache

Stellen Sie sich vor, Sie bearbeiten ein 'A' Einheit innerhalb eines Controllers. Die GET -Aktion verwendet Find(), um die Entität zu laden. Die Post -Aktion versucht dann zu anhängen und zu aktualisieren. Wenn jedoch ein anderes 'A' Entität mit demselben Primärschlüssel an anderer Stelle geladen wird (z. B. während der Validierung des Benutzerzugriffs), wird ein Tracking -Konflikt erstellt.

Auflösung mit AsNoTracking()

Die effektivste Lösung besteht darin, zu verhindern, dass der DBContext die zur Validierung verwendete Entität verfolgt. Verwenden Sie die Methode 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>
Nach dem Login kopieren

AsNoTracking() stellt sicher

Alternative: Die -Methode Detach()

Ein anderer Ansatz beinhaltet die Ablösung der Entität von der

vor der Änderung mit der DbContext -Methode. Dies verhindert die Verfolgung von Konflikten. Beachten Sie jedoch, dass sich die Ablösung auf andere Teile Ihres Codes auswirken kann. Berücksichtigen Sie daher sorgfältig die Auswirkungen, bevor Sie diese Lösung implementieren. Detach()

Das obige ist der detaillierte Inhalt vonWie löste ich Entitätsschlüsselkonflikte bei der Bearbeitung von Unternehmen in ASP.NET MVC?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage