C#, Dataset: Ich bekomme Cascaded Inserts nicht hin
27. Mai 2012, 11: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.
|