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をリレーションシップに自動的に挿入しません。2段階のプロセスに頼る必要があります。

  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

UpdateRule を Cascade に設定して、ForeignKeyConstraint を追加することをお勧めします。

于 2008-10-01T11:29:58.610 に答える