我在两个表之间建立了父子关系。父表设置为其主键的自动增量值。这工作正常,父DataTable中的新行将使用在TableAdaptor上调用Update
时刚刚插入的键的实际值进行刷新。
问题是子表中的行没有插入到数据库中。出于调试目的,我在代码示例中添加了changesBefore
和changesAfter
,以查看子表中存在哪些已更改的行。当我使用调试器逐步执行代码时,changesBefore
会保留新的子行。 changesAfter
是Nothing
。它几乎就像对标头表调用Update
一样,在子表上触发AcceptChanges
。
我熟悉DataTables和TableAdapters的插入/更新,但这是我第一次尝试在父表上使用自动增量。我在这里缺少什么?
Dim changesBefore = _ds.ResponseDetails.GetChanges
headersTa.Update(_ds.ResponseHeaders)
Dim changesAfter = _ds.ResponseDetails.GetChanges
detailsTa.Update(_ds.ResponseDetails)
答案 0 :(得分:0)
执行标头更新后,您需要使用标头记录中的自动生成ID更新详细记录中的链接字段。这不会自动发生。
答案 1 :(得分:0)
现在正在运作。事实证明,数据集中的每个关系都有AcceptRejectRule
属性。我将规则设置为Cascade
,因此当针对父级调用AcceptChanges
时,基本上将Update
级联到子表。将规则更改为None
解决了我的问题。
http://msdn.microsoft.com/en-us/library/system.data.acceptrejectrule(v=vs.80).aspx