Ich habe zwei Tabellen in meiner Datenbank durch Fremdschlüssel verbunden: Seite (PageId, andere Daten) und PageTag (PageId, Tag). Ich habe LINQ verwendet, um Klassen für diese Tabellen zu generieren, wobei die Seite als übergeordnetes Element und das Tag als untergeordnete Auflistung fungiert (Beziehung zwischen eins und mehreren). Gibt es eine Möglichkeit, PageTag-Datensätze in der Page-Klasse zum Löschen aus der Datenbank zu markieren?Wie lösche ich Datensätze aus einer untergeordneten Sammlung in LINQ to SQL?
Schnell clearification:
Ich möchte, dass die untergeordneten Objekte gelöscht werden, wenn die Eltern Datacontext SubmitChanges() aufruft, nicht vor. Ich möchte, dass sich TagString genau wie alle anderen Eigenschaften des Page-Objekts verhält.
Ich möchte Code aktivieren wie folgt aus:
Page page = mDataContext.Pages.Where(page => page.pageId = 1);
page.TagString = "new set of tags";
//Changes have not been written to the database at this point.
mDataContext.SubmitChanges();
//All changes should now be saved to the database.
Hier ist meine Situation im Detail ist:
Um mit der Sammlung von Tags einfacher zu machen, ich habe eine Eigenschaft der addierte page-Objekt, das den Tag Sammlung als String behandelt:
public string TagString {
get {
StringBuilder output = new StringBuilder();
foreach (PageTag tag in PageTags) {
output.Append(tag.Tag + " ");
}
if (output.Length > 0) {
output.Remove(output.Length - 1, 1);
}
return output.ToString();
}
set {
string[] tags = value.Split(' ');
PageTags.Clear();
foreach (string tag in tags) {
PageTag pageTag = new PageTag();
pageTag.Tag = tag;
PageTags.Add(pageTag);
}
}
}
Grundsätzlich ist die Idee ist, dass, wenn eine Reihe von Tags zu diesem Objekt gesendet wird, werden die aktuellen Tags des Objekts werden gelöscht und ein neuer Satz erzeugt in ihr Platz.
Das Problem, das ich bin zu begegnen ist, dass diese Linie:
PageTags.Clear();
eigentlich nicht die alten Tags aus der Datenbank gelöscht, wenn Änderungen vorgelegt werden.
Um zu sehen, scheint die "richtige" Möglichkeit, Dinge zu löschen, die DeleteOnSubmit-Methode der Datenkontextklasse aufzurufen. Aber ich habe scheinbar keinen Zugriff auf die DataContext-Klasse innerhalb der Page-Klasse.
Kennt jemand eine Möglichkeit, die untergeordneten Elemente zum Löschen aus der Datenbank innerhalb der Klasse Page zu markieren?
Aaron, danke für die Einsicht. Aber wäre es nicht einfacher, zwei Zeilen Code in Ihr Repository zu schreiben, um die Datensätze zu löschen? –
Es sind nicht zwei Zeilen Code im Repository. Ich könnte eine UpdateTags (Page-Seite, String-TagString) -Methode zum Repository hinzufügen, aber das würde nicht so sauber mit Modellbindung arbeiten. – AaronSieb
Dies ist auch ziemlich einfach einzurichten, jetzt, da ich weiß, dass es mit der Option "Überlappung löschen" verknüpft ist, und die manuelle Bearbeitung der Designerdatei umgehen kann. – AaronSieb