AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein .NET-Framework (managed code) C#, Dataset: Ich bekomme Cascaded Inserts nicht hin
Thema durchsuchen
Ansicht
Themen-Optionen

C#, Dataset: Ich bekomme Cascaded Inserts nicht hin

Ein Thema von Furtbichler · begonnen am 27. Mai 2012 · letzter Beitrag vom 27. Mai 2012
Antwort Antwort
Furtbichler
(Gast)

n/a Beiträge
 
#1

C#, Dataset: Ich bekomme Cascaded Inserts nicht hin

  Alt 27. Mai 2012, 10:07
Hi,

Ich habe ein Dataset, und zwei Tabellen (Master, Detail).
Master = [PK MasterID]
Detail = [PK DetailID, FK MasterID]

Beide Primary keys sind Autoincrements.

Ich habe in Visual Studio ein Dataset mit den beiden Tabellen angelegt und die FK-Relation so eingestellt, das kaskadiertes Insert und Update aktiviert sind. Das Dataset ist auf 'HierarchicalUpdates=true' eingestellt.

Wenn ich zu einem existierenden Master ein paar Details hinzufüge, klappt es, d.h. beim Neuanlegen wird automatisch die MasterID befüllt, die DetailID bekommt zunächst einen negativen Wert und nach dem Speichern wird diese ID mit dem echten PK befüllt.

Wenn ich einen neuen Master einfüge und dann sofort Details erstelle, dann bekommen die Details korrekterweise die temporäre negative MasterID sowie ihre eigene temporäre negative DetailID. Soweit ist alles ok.

Nun muss das Zeugs in die Datenbank geschrieben werden:
Ich schaffe es einfach nicht, das erst der Master eingefügt wird, dessen neue ID automatisch in die Details überführt wird und dann die Details ihrerseits gespeichert werden.

Angeblich reicht es, "TableAdapterManager.UpdateAll()" aufzurufen, nur dann bekomme ich einen DBConcurrencyException im UpdateCommand. Und das, obwohl ich ein InsertCommand erwarte. Ich habe doch neue Datensätze hinzugefügt.

Wenn ich "MasterTableAdapter.Update(MyDataset.DetailTab le)" aufrufe, dann speichert er den neuen Master und ersetzt die temporären negativen MasterIDs in den Detaildatensätzen korrekterweise durch die neue ID. Super.... Aber die Details bekomme ich dann einfach nicht gespeichert: Ich bekomme den gleichen Fehler.

Wie verdammt krieg ich das hin, ohne ellenlangen Code zu schreiben. Das muss doch gehen!

PS: Eine "Lösung" wäre, jeden neuen Master sofort zu speichern, aber das ist keine Lösung, sondern ein Workaround. Daran bin ich nicht interessiert.
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.610 Beiträge
 
#2

AW: C#, Dataset: Ich bekomme Cascaded Inserts nicht hin

  Alt 27. Mai 2012, 11:23
Hast Du in Deinem Dataset die Relation auch korrekt eingetragen?
Konkret geht es hier um die DataTableConstraint (ForeignKeyConstraint - http://msdn.microsoft.com/en-us/library/st1t2c35.aspx ) zwischen der Master- und der Detail-Table in Deinem Dataset und der DataRelation ( http://msdn.microsoft.com/en-us/libr...arelation.aspx ) zwischen den Tabellen im allgemeinen.

Die DataColumn der PK-Spalte in Deiner Master-Table muss auch Cascading updates gesetzt haben, um die neue ID von der Datenbank auch an die Detail-Sätze weiterzugeben.

Theoretisch sollte das aber der TableAdapter vollautomatisch setzen. Nutzt Du den nicht?
Hier gibts noch ein paar Beispiele was man ansonsten manuell machen muss um das zum laufen zu bringen: http://msdn.microsoft.com/en-us/library/ks9f57t0.aspx
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org

Geändert von Phoenix (27. Mai 2012 um 11:23 Uhr) Grund: typo korrigiert
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#3

AW: C#, Dataset: Ich bekomme Cascaded Inserts nicht hin

  Alt 27. Mai 2012, 11:46
Hallo Phoenix,

Ich habe Visual Studio einfach gesagt: Nimm die Datenbank (die Foreign keys sind korrekt drin). Danach habe ich in Visual Studio in der FK-Relation noch die kaskadierten Updates und Deletes eingetragen. Sonst nichts.

Speichern wird mit 'TableAdapterManager.UpdateAll' gemacht, was aber nicht funktioniert.
Wie sähe das Speichern mit den Adaptern aus?
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:12 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz