Domanda

Ho una relazione molti-a-molti in 3 tabelle: ProgramUserGroup e Feature sono le due tabelle principali e il collegamento tra loro è LinkFeatureWithProgramUserGroup , dove ho relazioni di chiave esterna con le due tabelle principali.

Ho un set di dati con inserti: voglio aggiungere una nuova riga a ProgramUserGroup e una funzionalità correlata (esistente) alla tabella LinkFeatureWithProgramUserGroup. Quando inserisco nuove righe, sto impostando l'id predefinito su -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>

durante l'aggiornamento delle tabelle, viene visualizzato un errore:

" L'istruzione INSERT era in conflitto con il vincolo FOREIGN KEY " FK-LinkFeatu-Progr-7DCDAAA2 " ;. Il conflitto si è verificato nel database " x " ;, tabella " dbo.ProgramUserGroup " ;, colonna "id". & Quot;

Il codice per l'aggiornamento è il seguente:

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

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

se controllo l'ID della nuova riga della tabella ProgramUserGroup, è stato aggiornato da -1 a @@ identità (come 1099), quindi va bene - inserisce la nuova riga.

Ma nella tabella LinkFeatureWithProgramUserGroup, il relativo valore ProgramUserGroup.ID è ancora -1, non è stato comunque aggiornato.

Come posso forzare anche l'aggiornamento delle chiavi della tabella dei collegamenti? Ho provato

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

Ma non ho risolto il problema :(

Grazie,

b.

È stato utile?

Soluzione

, c'è una soluzione per questo.

  

Devi aggiornare l'adattatore della tabella della tabella padre per aggiornare   tabella dei dati dopo l'operazione di aggiornamento.   Ecco come puoi farlo.

  1. Apri le proprietà di ProgramUserGroupTableAdapter - > Query di selezione predefinita - > Opzioni avanzate . e seleziona l'opzione Aggiorna la tabella dei dati . Salva subito l'adattatore. Ora, quando si chiama update sull'adattatore della tabella, la tabella dei dati verrà aggiornata [aggiornata] dopo l'operazione di aggiornamento e rifletterà gli ultimi valori della tabella del database. se la chiave primaria o una qualsiasi colonna è impostata su auto-incremento, la tabella dei dati avrà l'ultimo valore dopo l'aggiornamento recente.

  2. Ora puoi chiamare l'aggiornamento come pug.Update (dsUserGroup.ProgramUserGroup);

  3. Leggi gli ultimi valori dalle colonne del ProgramUserGroup e assegna i rispettivi valori nella tabella figlio prima dell'aggiornamento . Funzionerà esattamente nel modo desiderato.

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top