我有一个带有两个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的新行。不存在并抛出错误。添加新组(父)然后立即添加与新添加的组关联的新成员(子)的正确方法是什么?
答案 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是数据库。)