Come si fa a mantenere una struttura ad albero di una tabella di database con incremento automatico Id usando un ADO.NET DataSet e un DataAdapter

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

  •  08-06-2019
  •  | 
  •  

Domanda

Ho un auto-referenziale Ruolo la tabella che rappresenta una struttura ad albero

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

Sto utilizzando un ADO.NET DataTable e DataAdapter per caricare e salvare i valori di questa tabella.Questo funziona se creo solo i bambini delle righe esistenti.Se ho un bambino di riga, quindi fare un bambino del bambino, quindi Aggiornare la temporanea valore di ID generato dal DataTable è andare in ParentID colonna.Ho i seguenti dati relazione impostare:

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

E quando faccio nuovo bambino righe nel DataTable che io chiamo il metodo SetParentRow

newRow.SetParentRow(parentRow)

C'è qualcosa di particolare che devo fare per ottenere la generazione di ID di propagare in modo ricorsivo quando chiamo Aggiornamento DataAdapter?

È stato utile?

Soluzione

Non so ADO.net in particolare, ma la maggior parte degli Orm non inserire automaticamente l'ID di un nuovo record in una relazione.Dovrete ricorrere al 2 fasi:

  1. creare e salvare un genitore
  2. creare e salvare il bambino con il rapporto genitore

La ragione di che questo è difficile per Orm è perché si potrebbe avere dipendenze circolari, e non so quale oggetto è necessario per creare un ID per primo.Alcuni Orm sono abbastanza intelligente per capire quei rapporti dove non esistono dipendenze circolari, ma la maggior parte non lo sono.

Altri suggerimenti

Fa differenza se si va

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

Vi suggerisco di aggiungere un ForeignKeyConstraint, con UpdateRule insieme a Cascata.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top