使用c#DataSet将新元组插入到1对多关系表中

时间:2011-09-26 19:49:48

标签: c# .net sql dataset strongly-typed-dataset

我有一个带有两个TableAdapter(1对多关系)的类型化DataSet,它是使用visual studio 2010的配置向导创建的。子表的FK使用级联。它是跟踪组(父表)和组成员(子表)的应用程序的一小部分。

我可以很好地将新元组插入到Groups表中,但是当我尝试将新元组插入Members表时,当FK基于我刚刚插入到组表中的组时,会出现问题。您可以在以下代码段中看到问题

GroupsDataSet.GroupsRow addedGroup = this.groupsDataSet.Groups.AddGroupsRow(groupName, this.type);
this.groupsDataSet.Members.AddMembersRow(memberName, addedGroup);
this.groupsTableAdapter.Update(this.GroupsDataSet.Groups);
this.membersTableAdapter.Update(this.GroupsDataSet.Members);

当我在Group表(父)中插入一个新行时,addedGroup.id返回的PK id为-1,所以似乎成员表(子)插入试图插入一个groupId = -1的新行。不存在并抛出错误。添加新组(父)然后立即添加与新添加的组关联的新成员(子)的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

我认为您遇到的问题是在您更新之前不会填写ID。因此,您需要将语句的顺序更改为:

GroupsDataSet.GroupsRow addedGroup = this.groupsDataSet.Groups.AddGroupsRow(groupName,      this.type);
this.groupsTableAdapter.Update(this.GroupsDataSet.Groups);
this.groupsDataSet.Members.AddMembersRow(memberName, addedGroup);
this.membersTableAdapter.Update(this.GroupsDataSet.Members);

还需要检查插入时刷新设置。如果你看一下这个链接中的图3 :(我假设SQL Server是数据库。)

http://blogs.msdn.com/b/vsdata/archive/2009/09/14/refresh-the-primary-key-identity-column-during-insert-operation.aspx