Fehlerbehebung doppelter Hauptschlüsselfehler beim Anbringen von Entitäten in ASP.NET MVC
In ASP.NET -MVC -Anwendungen kann der Versuch, eine Entität anzuhängen, aufgrund eines doppelten Verstoßes gegen Primärschlüsseleinschränkungen fehlschlagen. Dies manifestiert sich häufig als Fehlermeldung, die darauf hinweist, dass bereits eine Entität mit demselben Primärschlüssel vorhanden ist. Dieser Artikel beschreibt eine gemeinsame Ursache und ihre Lösung.
Das Problem tritt häufig bei der Aktualisierung des Status eines Unternehmens auf EntityState.Modified
mit db.Entry(entity).State = EntityState.Modified
auf. Die Untersuchung zeigt häufig, dass eine separate Funktion, die für die Autorisierung oder das Abrufen von Daten verantwortlich ist, vor vor das Status-Update vorlädt. Dieser Vorladungsprozess kann dazu führen, dass sich die Entität lösen und die nachfolgende Attach
-Operation fehlschlagen, da der Rahmen der Ansicht ist
-Methode in der Entity Framework -Abfrage verwendet wird. AsNoTracking()
-Funktion: canUserAccessA
<code class="language-csharp">// Problematic function - loads and tracks the entity private bool canUserAccessA(int aID) { int userID = WebSecurity.GetUserId(User.Identity.Name); int aFound = db.Model.Where(x => x.aID == aID && x.UserID == userID).Count(); // Tracks the entity return (aFound > 0); }</code>
: AsNoTracking()
zu verwenden
<code class="language-csharp">// Corrected function - loads the entity without tracking 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>
stellt sicher, dass die geladene Entität nicht vom Kontext verfolgt wird, wodurch Konflikte mit nachfolgenden AsNoTracking()
oder Attach
Operationen verhindert werden. Beachten Sie, dass bei der Verwendung von Update
mit .Find(aID)
einfacher erscheint, möglicherweise abhängig von der Datenbank- und Kontextkonfiguration unwirksam. Die bereitgestellte Abfrage bietet einen robusteren Ansatz. AsNoTracking
Das obige ist der detaillierte Inhalt vonWie kann ich auflösen, dass das Anbringen einer Entität aufgrund doppelter Primärschlüsselwerte in ASP.NET MVC fehlgeschlagen ist?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!