LINQ an SQL, AJAX -Postbacks und Seitenstatus in ASP.NET
-
03-07-2019 - |
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.
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.