Wie tun Sie bleiben eine Baum-Struktur in eine Datenbank-Tabelle mit auto-increment IDs mit ein ADO.NET DataSet und ein DataAdapter

StackOverflow https://stackoverflow.com/questions/5263

  •  08-06-2019
  •  | 
  •  

Frage

Ich habe eine selbst-referenzielle Rolle Tabelle, stellt eine Baum-Struktur

ID [INT] AUTO INCREMENT
Name [VARCHAR]
ParentID [INT]

Ich bin mit einem ADO.NET DataTable und DataAdapter, zu laden und speichern von Werten in dieser Tabelle.Dies funktioniert, wenn ich nur erstellen die Kinder der vorhandenen Zeilen.Wenn ich ein Kind Zeile, dann ein Kind, das Kind, dann Aktualisieren Sie die temporäre ID-Wert generiert, indem die DataTable wird in die ParentID-Spalte.Ich habe die folgenden Daten relation gesetzt:

dataset.Relations.Add(New DataRelation("RoleToRole",RoleTable.Columns("ID"), RoleTable.Columns("ParentID")))

Und wenn ich neue untergeordnete Zeilen in der DataTable, nenne ich das SetParentRow Methode

newRow.SetParentRow(parentRow)

Ist es etwas besonderes, ich habe zu tun, um die ID-Generierung zu verbreiten rekursiv, wenn ich Update aufrufen, auf der DataAdapter?

War es hilfreich?

Lösung

Ich weiß nicht, ADO.net insbesondere aber die meisten ORMs nicht automatisch, legen Sie die ID eines neuen Datensatzes in eine Beziehung.Sie müssen resort auf die 2-Schritt-Prozess:

  1. erstellen und speichern Eltern
  2. erstellen und speichern Sie Kind-Beziehung zu Eltern

Der Grund, dass dies schwierig für ORMs ist, da Sie möglicherweise zirkuläre Abhängigkeiten, und es würde nicht wissen, welches Objekt es benötigt, um erstellen Sie eine ID für das erste.Einige ORMs sind schlau genug um jene Beziehungen, in denen es keine solche zirkulären Abhängigkeiten, aber die meisten nicht.

Andere Tipps

Macht es einen Unterschied, wenn Sie gehen

newRow.SetParentRow(parentRow, RoleTable.Relations("RoleToRole"))

Ich schlage vor, Sie fügen Sie eine ForeignKeyConstraint, mit UpdateRule set to Cascade.

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