Fehlermeldung: Das Anhängen einer Entität vom Typ ist fehlgeschlagen, da eine andere Entität desselben Typs bereits denselben Primärschlüsselwert aufweist.
Frage: Wie verknüpfe ich eine Entität auf ähnliche Weise, wie in der AttachActivity-Methode im folgenden Code gezeigt?
Ich muss annehmen, dass der "andere Entität" -Teil der obigen Fehlermeldung auf ein Objekt verweist, das im Speicher existiert, aber außerhalb des Gültigkeitsbereichs liegt (??). Ich bemerke dies, weil die Local-Eigenschaft des DBSet für den Entitätstyp, den ich anhängen möchte, null zurückgibt.
Ich bin ziemlich sicher, dass die Entitäten in dem Kontext nicht existieren, weil ich den Code durchtrete und den Kontext beobachte, während er erstellt wird. Die Entitäten werden in den wenigen Zeilen unmittelbar nach dem Erstellen von dbcontext hinzugefügt.
Testen Sie für angehängte Entitäten wie hier angegeben: Was ist der sinnvollste Weg herauszufinden, ob eine Entität an dbContext angehängt ist oder nicht?
Wenn ich Einheimische im lokalen Fenster von Visual Studio betrachte, sehe ich keine Entitäten vom Typ Activity (unabhängig von der ID) außer dem, den ich anhängen möchte.
Der Code wird in dieser Reihenfolge ausgeführt: Try - & gt; ModifyProject - & gt; AttachActivity
Der Code schlägt in der AttachActivity in der Kommentarzeile fehl.
Beachten Sie den Code zwischen den Debug-Kommentaren, der ausgelöst wird, wenn dem Kontext Entitäten hinzugefügt wurden.
%Vor%Dies ist die Klasse, die den dbContext aktualisiert:
%Vor%Ich frage nicht: Wie verwende ich AsNoTracking Welchen Unterschied macht .AsNoTracking ()?
Eine Lösung, um diesen Fehler zu vermeiden, ist die Verwendung von Find
method. Bevor Sie die Entity anhängen, fragen Sie DbContext
nach der gewünschten Entity ab. Wenn die Entity im Speicher vorhanden ist, erhalten Sie eine lokale Entity, andernfalls wird die Entity aus der Datenbank abgerufen.
Das Anhängen einer Entität vom Typ ist fehlgeschlagen, weil eine andere Entität desselben Typs bereits denselben Primärschlüsselwert aufweist. Dies kann passieren, wenn Sie die Methode Attach
verwenden oder den Status einer Entität auf Unchanged
oder Modified
setzen, wenn Entitäten im Diagramm widersprüchliche Schlüsselwerte aufweisen. Dies liegt möglicherweise daran, dass einige Entitäten neu sind und noch keine datenbankgenerierten Schlüsselwerte erhalten haben. Verwenden Sie in diesem Fall Add
.
Die Lösung ist das
wenn Sie GetAll ()
verwenden müssen %Vor%Wechseln zu
%Vor%Ich habe diesen Fehler behoben, indem ich die Update-Methode wie folgt geändert habe.
wenn Sie das generische Repository und die Entität verwenden
%Vor%oder normales (nicht-generisches) Repository und Entity, dann
%Vor%Wenn Sie die AddOrUpdate () -Methode verwenden, stellen Sie bitte sicher, dass Sie hinzugefügt haben " System.Data.Entity.Migrations " Namespace.
Tags und Links .net c# entity-framework