为什么我的子记录与保存到Access的数据集中的父记录无关?

时间:2012-11-03 01:54:59

标签: .net visual-studio-2010 ms-access dataset

所以我有一个带父表的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中,并且向导已创建了DataSet和Adapters。 我修改了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'.

我错过了什么?

1 个答案:

答案 0 :(得分:0)

您是否在taParent.Update(ds) rowParent实际更新后检查了并且包含了数据库中正确的ID

  • 如果是,您是否尝试在保存孩子rowChild.SetParentRow(rowParent)之前设置taChild.Update(ds.Child)

  • 如果您的rowParenttaParent.Update(ds)之后没有包含有效的ID,您是否尝试从数据库重新加载它,然后再将其分配给孩子?

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