8

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

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

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

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

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

newRow.SetParentRow(parentRow)

当我在 DataAdapter 上调用 Update 时,是否需要做一些特别的事情才能使 ID 生成递归传播?

4

3 回答 3

2

我不特别了解 ADO.net,但大多数 ORM 不会自动在关系中插入新记录的 ID。您将不得不诉诸两步过程:

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

这对 ORM 来说很困难的原因是因为您可能有循环依赖关系,并且它不知道首先需要为哪个对象创建 ID。一些 ORM 足够聪明,可以找出那些没有这种循环依赖关系的关系,但大多数都没有。

于 2008-08-23T18:37:59.287 回答
0

如果你去有什么不同吗

newRow.SetParentRow(parentRow, RoleTable.Relations("RoleToRole"))
于 2008-08-07T23:57:22.670 回答
0

我建议你添加一个 ForeignKeyConstraint,UpdateRule 设置为 Cascade。

于 2008-10-01T11:29:58.610 回答