Das Anhängen einer Entität vom Typ ist fehlgeschlagen, weil eine andere Entität desselben Typs bereits denselben Primärschlüsselwert aufweist

7

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 ()?

    
Sam 12.11.2014, 05:35
quelle

4 Antworten

20

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.

%Vor%     
Mohsen Esmailpour 12.11.2014 06:11
quelle
4

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%     
Jaykishan 23.02.2017 07:36
quelle
2

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.

    
dush88c 08.08.2016 04:16
quelle

Tags und Links