2009-11-30 70 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