1

所以我有一个带有父表的 MS Access 数据库:

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 Constraint并将Update/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 为空。

如果我尝试:

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)在保存孩子之前进行设置taChild.Update(ds.Child)

  • 如果您rowParent在 之后不包含有效 ID taParent.Update(ds),您是否尝试在将其分配给孩子之前从数据库中重新加载它?

看起来问题可能与以下事实有关:在将数据保存到数据库之前无法知道自动增量 ID,然后从中重新加载,以便您可以将该值分配给其他记录。

于 2012-11-03T02:55:09.860 回答