如何使用ADO.NET DataSet和DataAdapter将树结构持久化到具有自动递增ID的数据库表

Jus*_*ran 8 .net database ado.net

我有一个表示树结构的自引用角色表

ID [INT] AUTO INCREMENT
Name [VARCHAR]
ParentID [INT]
Run Code Online (Sandbox Code Playgroud)

我正在使用ADO.NET DataTable和DataAdapter来加载和保存此表的值.如果我只创建现有行的子项,则此方法有效.如果我创建子行,然后创建该子项的子项,然后更新,DataTable生成的临时ID值将进入ParentID列.我有以下数据关系集:

dataset.Relations.Add(New DataRelation("RoleToRole",RoleTable.Columns("ID"), RoleTable.Columns("ParentID")))
Run Code Online (Sandbox Code Playgroud)

当我在DataTable中创建新的子行时,我调用了SetParentRow方法

newRow.SetParentRow(parentRow)
Run Code Online (Sandbox Code Playgroud)

当我在DataAdapter上调用Update时,是否有一些特殊的东西可以使ID生成以递归方式传播?

Jam*_*sen 2

我不太了解 ADO.net,但大多数 ORM 不会自动在关系中插入新记录的 ID。您必须采用两步流程:

  1. 构建并保存父级
  2. 建立并拯救孩子与父母的关系

这对于 ORM 来说很困难,因为您可能存在循环依赖关系,并且它不知道首先需要为哪个对象创建 ID。一些 ORM 足够聪明,可以找出不存在此类循环依赖关系的关系,但大多数则不然。