LINQ-to-SQL + One-to-many + DataBinding löschen

Verwende ich LINQ-to-SQL-zum laden von Daten aus einer Datenbank, die zwei Tabellen in einer eins-zu-viele-Beziehung (ein Rezept hat viele Zutaten).

Lade ich ein Rezept und LINQ ruft Zutat Objekte in ein EntitySet, die gebundenen in eine ListBox.

Wenn ich löschen möchte einige Zutaten aus einem Rezept, bekomme ich eine "Ein Versuch wurde gemacht, um zu entfernen, eine Beziehung zwischen einem Rezept und eine Zutat. Jedoch die Beziehung Fremdschlüssel (Inhaltsstoff.RecipeID) nicht auf null gesetzt werden.

Ich LÖSTE dieses problem mithilfe der bekannten Lösung durch das hinzufügen von 'DeleteOnNull="true"' auf die DBML-Datei. Aber das hinzufügen dieser Einstellung werden nur das problem, wenn wir uns beim löschen Zutat Objekte, die abgerufen wurden von der DB.

Das problem ist mit dem Wirkstoff Objekte, die erstellt wurden, in code (Hinzugefügt, um ein Rezept) und Hinzugefügt, um das EntitySet-Sammlung von Zutaten und dann gelöscht, BEVOR SubmitUpdates genannt wird. Dann wird die gleiche exception wieder passiert. Dies geschieht in der Regel auf ein neues, noch nicht gespeichertes Rezept wenn der Benutzer das hinzufügen von Zutaten hinzu, macht einen Fehler und löscht eine Zutat aus einem Rezept. Ich fügte hinzu, die DeleteOnNull sowohl 'Association Name="Recipe_Ingredient"' - Zeilen in der DBML.

Wie soll ich die entfernen Sie solche Objekte? Die einzige Lösung sehe ich im moment ist, dass ich laden Sie die Zutaten in eine Sammlung, die nicht unter den DataContext und dann beim speichern, löschen, alle Zutaten aus einem Rezept und fügen Sie dann wieder aus diesem cache..

  • Sprechen Sie Linq-SQl oder Linq to Entities??
  • Wird Ihre neue Reciepe Objekt gehören ein DataContext beim hinzufügen/löschen Zutat Objekte?
  • Nein (wenn das Rezept ist neu) und ja (wenn es eine vorhandene, abgerufen fron DB und mit Zutaten Hinzugefügt werden).
InformationsquelleAutor Jurij | 2008-12-21
Schreibe einen Kommentar