关于 .net:如何使用 ADO.NET DataSet 和 DataAdapter 将树结构持久保存到具有自动递增 ID 的数据库表中

关于 .net:如何使用 ADO.NET DataSet 和 DataAdapter 将树结构持久保存到具有自动递增 ID 的数据库表中

How do you persist a tree structure to a database table with auto incrementing IDs using an ADO.NET DataSet and a DataAdapter

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

1
2
3
ID [INT] AUTO INCREMENT
Name [VARCHAR]
ParentID [INT]

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

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

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

1
newRow.SetParentRow(parentRow)

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


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

  • 构建并保存父级
  • 建立和保存与父母的关系的孩子
  • 这对 ORM 来说很困难的原因是你可能有循环依赖,它不知道首先需要为哪个对象创建 ID。一些 ORM 足够聪明,可以找出那些没有这种循环依赖关系的关系,但大多数都没有。


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


    如果你去有什么不同吗

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

    推荐阅读

      如何使用计算机加速引导盘

      如何使用计算机加速引导盘,,点评:随着磁盘读写速度的大大提高,U的作用越来越大,比如磁盘加载系统,用U盘维护系统等等。今天我给大家带来的是如

      如何使用笔记本wifi

      如何使用笔记本wifi,,无线上网笔记本分为两种,一个是连接无线局域网的无线网络卡的使用近(WLAN、WI-FI),一种是使用USB调制解调器实现3G无线网

      惠普笔记本如何使用惠普笔记本

      惠普笔记本如何使用惠普笔记本,,惠普笔记本相信每个人都不会陌生,在PC行业是全球知名企业之一。有很多朋友围绕惠普品牌笔记本使用,今天有网

      移动硬盘如何使用移动硬盘维护知识

      移动硬盘如何使用移动硬盘维护知识,,现在移动硬盘的广泛使用和快节奏的工作使拆迁的一部分;驱动;人,我们说不;拆除;拆除手段,在硬盘有意无意的操

      wps表格按纽如何使用

      wps表格按纽如何使用,WPS教程,1.再WPS表格中如何设置按钮第一步需要您确认您的Excel菜单中有没有开发工具这一选项,若没有我们需要手动添加

      如何使用UltraISO制作可引导(启动

      如何使用UltraISO制作可引导(启动,系统,文件,如何使用UltraISO制作可引导(启动)U盘PE系统_1、首先将U盘插入电脑的USB接口(重要提示:制作过程U