1

だから私は親テーブルを持つMS Access DBを持っています:

ID Autonumber
Description Text

子テーブル:

ID AutoNumber 
Description Text 
ParentID Number

私は関係を作成しました:

Parent column: ID
Child column: ParentID
Enforce Ref Integrity, Cascade Update and Cascade Delete

これを Visual Studio 2010 にドロップしたところ、ウィザードによってデータセットとアダプターが作成されました。xsd を変更して、関係を にBoth Relation and Foreign Key ConstraintUpdate/Deleteルールをに設定しましたCascade

だから私は関連する子レコードを持つ親レコードを追加しようとします:

var taParent = new TestDataSetTableAdapters.ParentTableAdapter();
var taChild = new TestDataSetTableAdapters.ChildTableAdapter();
var ds = new TestDataSet();
taParent.Fill(ds.Parent);
taChild.Fill(ds.Child);

var rowParent = ds.Parent.NewParentRow();
rowParent.Description = DateTime.Now.ToString();
ds.Parent.AddParentRow(rowParent);

var rowChild = ds.Child.NewChildRow();
rowChild.ChildText = DateTime.Now.ToString();
ds.Child.AddChildRow(rowChild);

taParent.Update(ds);
var parentId = rowParent.ID;  // <-- This is still -1
// taParent.Fill(ds.Parent);  // <-- Doing this hoping to reload the parent record gives:  Cannot clear table Parent because ForeignKeyConstraint ParentChild enforces constraints and there are child rows in Child.

taChild.Update(ds.Child);

ただし、子レコードの ParentID は null です。

私がしようとすると:

rowChild.SetParentRow(rowParent);

もらいます
You cannot add or change a record because a related record is required in table 'Parent'.

私は何が欠けていますか?

4

1 に答える 1

0

実際に更新され、データベースから適切なものが含まれtaParent.Update(ds)ていることを確認しましたか?rowParentID

  • もしそうならrowChild.SetParentRow(rowParent)、 Child を保存する前に設定しようとしましたtaChild.Update(ds.Child)か?

  • rowParentの後に有効な ID が含まれていない場合taParent.Update(ds)は、子に割り当てる前にデータベースから再読み込みしようとしましたか?

この問題は、データがデータベースに保存される前に自動インクリメント ID を認識できず、データベースから再ロードして、その値を他のレコードに割り当てることができるという事実におそらく関連しているようです。

于 2012-11-03T02:55:09.860 に答える