2009-11-30 68 views
1

我有3代表一个多一对多的关系:ProgramUserGroup功能是两个主表,以及它们之间的联系是LinkFeatureWithProgramUserGroup,在那里我有两个父表的外键关系。强类型数据集:将许多一对多关系

我有一个插入数据集:我想向ProgramUserGroup添加一个新行,并向LinkFeatureWithProgramUserGroup表添加一个相关(现有)特征。 当插入新行,我设置的默认ID为-1:

<diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1"> <DataSetUserGroup xmlns="http://tempuri.org/DataSetUserGroup.xsd"> 
<ProgramUserGroup diffgr:id="ProgramUserGroup1" msdata:rowOrder="0" diffgr:hasChanges="inserted"> 
    <id>-1</id> 
    <Name>99999999999</Name> 
    <Active>false</Active> 
</ProgramUserGroup> 
<LinkFeatureWithProgramUserGroup diffgr:id="LinkFeatureWithProgramUserGroup1" msdata:rowOrder="0" diffgr:hasChanges="inserted"> 
    <id>-1</id> 
    <Feature_id>7</Feature_id> 
    <ProgramUserGroup_id>-1</ProgramUserGroup_id> 
</LinkFeatureWithProgramUserGroup> </DataSetUserGroup> </diffgr:diffgram> 

,而我更新的表,我得到一个错误:

“INSERT语句冲突与外键约束“FK-LinkFeatu-Progr-7DCDAAA2”。冲突发生在数据库“x”,表“dbo.ProgramUserGroup”,列'id'。“

用于更新的代码如下:

DataSetUserGroupTableAdapters.LinkFeatureWithProgramUserGroupTableAdapter lfa = new LinkFeatureWithProgramUserGroupTableAdapter(); 
DataSetUserGroupTableAdapters.ProgramUserGroupTableAdapter pug = new ProgramUserGroupTableAdapter(); 

pug.Update(dsUserGroup.ProgramUserGroup); 
lfa.Update(dsUserGroup.LinkFeatureWithProgramUserGroup); 

如果我检查ProgramUserGroup表的新行的ID,它已经从-1更新@@身份(如1099),所以也没关系 - 它插入新行。

但是在LinkFeatureWithProgramUserGroup表中,相关的ProgramUserGroup.ID值仍然是-1,它没有被更新。

我该如何强制更新链接表的密钥? 我试过

pug.Update(dsUserGroup.ProgramUserGroup); 
dsUserGroup.Merge(dsUserGroup.ProgramUserGroup); 
lfa.Update(dsUserGroup.LinkFeatureWithProgramUserGroup); 

但没有解决问题:(

感谢,

回答

1

,有一个变通此。

You need to tell your parent table's table-adapter to refresh the data-table after update operation. This is how you can do that.

  1. 打开属性ProgramUserGroupTableAdapter - >默认选择Query - > Advnaced选项。并检查选项刷新数据表。现在保存适配器。现在,当您调用表适配器上的更新时,数据表将在更新操作后更新[刷新],并将反映数据库表中的最新值。 如果主键或任何色彩设置为自动递增,则数据表将在最近更新后具有最新值。

  2. 现在你可以调用更新为pug.Update(dsUserGroup.ProgramUserGroup);

  3. 从程序用户组颜色中读取最新值并在更新之前将相应的值分配到子表中。这将按照你想要的方式工作。

alt text http://ruchitsurati.net/files/tds1.png

+0

我已经想通了 - 但是感谢好的教程,我希望这将有助于其他人也:) – balint 2009-12-27 00:13:17