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

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

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

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

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

newRow.SetParentRow(parentRow)

在DataAdapter上调用Update时,我需要做些特殊的事情来使ID生成以递归方式传播吗?

===============>>#1 票数:2 已采纳

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

  1. 建立并保存父项
  2. 建立并保存与父母有关系的孩子

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

===============>>#2 票数:0

我建议您添加一个ForeignKeyConstraint,并将UpdateRule设置为Cascade。

===============>>#3 票数:0

你去有什么区别吗

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

  ask by Justin Walgran translate from so

未解决问题?本站智能推荐: