Ich habe ein Problem mit Entity Framework 4.0. Ich versuche ein "Behandlungs" -Objekt zu speichern, das eine Sammlung von "Segment" -Objekten enthält. Immer wenn ich versuche, ein Treatment-Objekt hinzuzufügen oder zu bearbeiten, bei dem ich zwei oder mehr neue Segmente hinzufüge, erhalte ich den folgenden Fehler:
Die Änderungen an der Datenbank wurden erfolgreich festgeschrieben, aber beim Aktualisieren des Objektkontexts ist ein Fehler aufgetreten. Der ObjectContext befindet sich möglicherweise in einem inkonsistenten Zustand. Innere Ausnahmemeldung: AcceptChanges kann nicht fortgesetzt werden, da die Schlüsselwerte des Objekts mit einem anderen Objekt im ObjectStateManager in Konflikt stehen. Stellen Sie sicher, dass die Schlüsselwerte eindeutig sind, bevor Sie AcceptChanges aufrufen.
Hier ist die Speichermethode, die ich verwende. Die Spalte "SegmentID" ist die PK für ein "Segment" und eine Ganzzahl, die im DB (MS SQL 2008) auf automatisches Inkrement gesetzt wird. Standardmäßig wird die "SegmentID" auf 0 gesetzt, bis sie das aktualisierte Segment vom DB erhält.
%Vor% Das Problem ist, dass Sie dieselbe Segment
-Schlüssel zweimal in Ihrem Kontext zuweisen, was den ObjectStateManager muckt.
myTreatment
hat eine Sammlung von Segment
-Entitäten, die alle verfolgt werden. Jetzt, während Sie durch sie gehen, erstellen Sie ein weiteres Segment
, das möglicherweise den gleichen Schlüssel wie ein vorhandenes Segment
in Ihrer Sammlung hat:
Der Fehler wird angezeigt, wenn Sie eine Spalte als eindeutig definieren und versuchen, denselben Wert für diese Spalte zu speichern. Ich kann Ihnen einen Hinweis geben, wenn es für Sie machbar ist. Damit dies funktioniert, können Sie eine neue automatisch inkrementierte Spalte namens "id" in der segments-Tabelle hinzufügen und diese Spalte als Schlüssel behandeln
%Vor%Führe jetzt deinen Vorgang aus. Und bearbeiten und löschen Sie die Operation der Segmenteinheit basierend auf der ID des Segments.
Ich war in letzter Zeit mit diesem Problem konfrontiert, weil ich eine Menge von Objekten mit der Standard-ID Null hinzugefügt habe. Ich erwartete, dass die Datenbank und das Entitätsframework die korrekte ID berechnen könnten, da ich der Datenbank eine Sequenz und einen Trigger hinzugefügt habe Tabelle. Aber, es scheint, dass es nicht war, musste ich das Objekt mit der richtigen ID-Sequenz vorbereiten, bevor Änderungen im Datenbankkontext gespeichert wurden.
lookupOperation.ID = Sequance.GetSequenceBySequenceName ("lo_SEQ");
Tags und Links c# asp.net entity-framework-4