Frage

Ich habe eine many-to-many-Beziehung in drei Tabellen: ProgramUserGroup und Eigenschaft sind die beiden wichtigsten Tabellen, und die Verbindung zwischen ihnen ist LinkFeatureWithProgramUserGroup , wo ich Fremdschlüsselbeziehungen zu den beiden übergeordneten Tabellen.

Ich habe einen Datensatz mit Einsätzen: Ich habe eine neue Zeile ProgramUserGroup und ein damit verbundenes (bestehendes) Feature zur LinkFeatureWithProgramUserGroup Tabelle hinzufügen mag. Wenn neue Zeilen einfügen, ich bin Einstellung der Standard-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>

, während ich die Tabellen bin aktualisieren, erhalte ich eine Fehlermeldung:

"Die INSERT-Anweisung in Konflikt mit der FOREIGN KEY-Einschränkung "FK-LinkFeatu-Progr-7DCDAAA2". Der Konflikt trat in Datenbank "x", Tabelle "dbo.ProgramUserGroup", Spalte 'id'."

Der Code für das Update ist die folgende:

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

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

Wenn ich die ProgramUserGroup Tabelle der neuen Reihe der ID überprüfen, wurde von aktualisierten -1 Identität @@ (wie 1099), so ist es in Ordnung - es fügt die neue Zeile.

Aber in der LinkFeatureWithProgramUserGroup Tabelle, die im Zusammenhang ProgramUserGroup.ID Wert noch -1, es sowieso nicht aktualisiert wurde.

Wie kann ich das Update der auch Tasten der Verknüpfungstabelle erzwingen? Ich habe versucht,

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

Aber hat das Problem nicht lösen: (

Danke,

b.

War es hilfreich?

Lösung

Ja , gibt es eine Behelfslösung für diese.

  

Sie benötigen eine übergeordnete Tabelle Tisch-Adapter zu sagen, die aktualisieren   Daten-Tabelle nach dem Update-Vorgang.   Dies ist, wie Sie das tun.

  1. Öffnen Sie die Eigenschaften von ProgramUserGroupTableAdapter -> Standard Wählen Sie Abfrage -> Advnaced Optionen . und prüfen die Möglichkeit, Aktualisieren der Datentabelle . Speichern Sie den Adapter jetzt. Nun, wenn Sie Update auf dem Tisch-Adapter rufen, die Daten-Tabelle aktualisiert wird [aktualisiert] nach dem Update-Vorgang und die neuesten Werte von Datenbanktabelle beziehen. , wenn der Primärschlüssel oder eine coloumn auf Autoinkrement gesetzt ist, wird die Datentabelle diejenigen neueste Wert Post letzten Update.

  2. Jetzt können Sie das Update als pug.Update (dsUserGroup.ProgramUserGroup) Ruf;

  3. aktuelle Werte aus dem ProgramUserGroup coloumns lesen und entsprechenden Werten in die Tabelle Kind zuweisen, bevor update . Dies funktioniert genau so, wie Sie wollen.

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top