Como manter uma estrutura de árvore para uma tabela de banco de dados com auto incremento de IDs usando um ADO.NET conjunto de dados e um DataAdapter

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

  •  08-06-2019
  •  | 
  •  

Pergunta

Eu tenho uma auto-referencial Função de tabela que representa a estrutura de uma árvore

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

Eu estou usando uma ADO.NET DataTable e 'DataAdapter' para carregar e guardar os valores desta tabela.Isso funciona se eu apenas criar filhos de linhas existentes.Se eu fizer uma criança de linha, então faça uma criança da criança que, em seguida, Actualizar, a IDENTIFICAÇÃO temporário valor gerado pela DataTable está indo para o ParentID coluna.Eu tenho os seguintes dados com relação definida:

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

E quando eu tornar a nova criança linhas na DataTable eu chamo o método SetParentRow

newRow.SetParentRow(parentRow)

Há algo de especial que eu tenho que fazer para obter o ID de geração para propagar recursivamente quando eu chamar Update do DataAdapter?

Foi útil?

Solução

Eu não sei ADO.net em particular, mas a maioria Realiza não inserir automaticamente o ID de um novo registro em um relacionamento.Você vai ter que recorrer ao processo de 2 etapas:

  1. criar e guardar pai
  2. criar e salvar o filho com relação ao pai

A razão que isto é difícil para a Realiza é porque você pode ter dependências circulares, e ele não sei que objeto é necessário para criar uma IDENTIFICAÇÃO para o primeiro lugar.Alguns Realiza é inteligente o suficiente para descobrir essas relações onde não existem tais dependências circulares, mas a maioria não.

Outras dicas

Não faz diferença se você ir

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

Eu sugiro que você adicione um ForeignKeyConstraint, com UpdateRule definido para a Cascata.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top