Frage

Dies muss eine häufige Frage sein, aber noch nicht so, so scheint es. Ich verwende LINQ zu SQL für eine Anwendung, die eine Vielzahl von Datenänderungen an meinem In-Memory-Modell ermöglicht, und die Änderungen werden dann in eine Warteschlange zur asynchronischen Verarbeitung eingebaut. Also mache ich mir (noch) keine Sorgen um Updates. Änderungen an verschiedenen Teilen der Daten können über modale Popups auf der Webseite vorgenommen werden. Einige basieren auf Gitter, andere sind nur Attribute. Ich stoße auf ein Problem mit Veränderungen, die nicht überlebende Postback -Zyklen haben. Offensichtlich möchte ich nichts in der Datenbank bestehen, bis alle Änderungen vorgenommen wurden und der Benutzer die Seite einreicht.

Die Route, die ich bisher gewählt habe, ist:

  • Ich habe aufgeschobene Belastung deaktiviert
  • Ich erstelle eine [serialisierbare] Teilklasse für mein Stammobjekt
  • Ich stecke das Ding in die Sitzung und holte es im Onload -Ereignis ab

Dies scheint im Prinzip zu funktionieren. Wenn ich jedoch versuche, einige der Eigenschaften der Kinder nach dem Abrufen des Objekts aus der Sitzung zu aktualisieren

p.PhysicianSpecialties[0].physician_specialty_code = 
    ddlSpecialty.SelectedItem.Value;

Ich bekomme diesen Fehler:

Operation is not valid due to the current state of the object.

Der Fehler wird durch diesen Methodenaufruf in der generierten LINQ Setter -Methode verursacht:

this.SendPropertyChanging();

Andere Eigenschaften werden gut aktualisiert:

p.PhysicianNames[0].first_name = txtFirstName.Text.ToUpper();

Dies verursacht keinen Fehler.

Meine Fragen: Bin ich grundsätzlich auf dem falschen Track? Gibt es eine bessere Möglichkeit, dies zu tun? Was verursacht den Fehler?

UPDATE: Die Ausnahme lautet 'system.data.linq.foreignKeyReferenceAlreadyhasValueException'. Ich finde Ich bin auf etwas, aber ich kenne die Lösung noch nicht.

War es hilfreich?

Lösung

Ich habe die Lösung von MSDN bekommen. Das Problem ist und es wird besser erklärt in diesem Thread Ich kann es tun, dass man einen Verein nicht einseitig ändern kann, sondern an beiden Enden tun muss, indem man ein neues Kinderobjekt zugewiesen, nicht nur durch eine Änderung der ID:

P.physicianspecialties [0] .Physicianspecialylookup = db.physicianspecialylookups.Single (C => (C.Physiker_Specialty_Code == ddlspecialty.SelectedItem.Value));

Andere Tipps

Und wie geht man das, wenn man die Datenbindung verwendet? Ich habe eine Dropdown -Liste in einer Datengitteransicht, mit der ich diesen Fehler zu werfen begann, wenn ich den Dropdown -Wert ändere. Dies lässt mich denken, dass ich entweder die Assoziation löschen muss oder keine Datenbindung verwenden muss.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top