Как вы упорно древовидную структуру в таблице базы данных с автоматической Инкрементирование идентификаторов с помощью ADO.NET DataSet и DataAdapter

голоса
4

У меня есть самосправочная таблица Роли, которая представляет собой древовидную структуру

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

Я использую ADO.NET DataTable и DataAdapter для загрузки и сохранения значений в этой таблице. Это работает, если я только создать ребенок существующих строк. Если я дочерняя строка, а затем сделать ребенок этого ребенка, а затем обновить, временное значение идентификатора генерируется DataTable происходит в колонну ParentId. У меня есть следующий набор данных соотношения:

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

И когда я делаю новые дочерние строки в DataTable я называю метод SetParentRow

newRow.SetParentRow(parentRow)

Есть ли что-то особенное я должен сделать, чтобы получить поколение ID рекурсивно распространяться, когда я звоню Обновление на DataAdapter?

Задан 07/08/2008 в 21:23
источник пользователем
На других языках...                            


3 ответов

голоса
1

Я не знаю, ADO.NET, в частности, но большинство ORMs не будет автоматически вставить идентификатор новой записи в отношениях. Вам придется прибегнуть к процессу 2 шага:

  1. построить и сохранить родителей
  2. построить и сохранить ребенок с отношением к родителю

Причина, по которой это трудно ORMs потому, что вы могли бы иметь циклические зависимости, и он не будет знать, какой объект он нужно, чтобы создать идентификатор для первого. Некоторые ORMs достаточно умны, чтобы понять эти отношения, где нет таких круговых зависимостей, но большинство из них не являются.

Ответил 23/08/2008 в 19:37
источник пользователем

голоса
0

Я предлагаю вам добавить ForeignKeyConstraint с UpdateRule установлен в каскаде.

Ответил 01/10/2008 в 12:29
источник пользователем

голоса
0

Имеет ли значение, если вы идете

newRow.SetParentRow(parentRow, RoleTable.Relations("RoleToRole"))
Ответил 08/08/2008 в 00:57
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more