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>
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>
AsNoTracking()
stellt sicher
Alternative: Die -Methode Detach()
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!