Entwickler-Ecke
WPF / Silverlight - Abhängig Tabellen
didi_12 - So 29.07.12 11:03
Titel: Abhängig Tabellen
Hallo,
da ich neu im Thema WPF und Datenanbindung bin, die folgende Frage.
Ich habe zwei Tabellen in SQL-Server, die in einer 1:n-Beziehung zusammenhängen. Nun will ich über entsprechende Controls beide Tabellen füllen. Ich habe entsprechende TableAdapter und kann auch beide Tabellen separat befüllen.
Ich will aber natürlich die ID der Child-Tabelle in den Record der Parent-Tabelle als Teil eines Inserts auf der Parent-Tabelle mitübernehmen. Sprich einen Record in der Child-Tabelle einfügen, die erzeugte ID dann dem Insert für die Parent-Tabelle mitübergeben. Wie gehe ich da vor ?
Danke
Dieter
didi_12 - Sa 11.08.12 17:45
Hallo,
hat hier jemand eine Idee. Wie gesagt, wie kriege ich 1:n-abhängige Records über WPF-Controls in die entsprechenden Tabellen der Datenbank, so dass die Einträge in den WPF-Controls dann über einen Save-Button in korrekter Reihenfolge in die Tabellen der Datenbank gehen.
Danke
Dieter
Moderiert von
Th69: Full Quote entfernt
Th69 - Sa 11.08.12 18:32
Hallo Dieter,
der übliche Weg ist eigentlich die Verwendung eines ORM (Object Relation Mapper), z.B. EF (Entity Framework) oder Linq-2-SQL - zumindestens diese sind beide beim Visual Studio dabei (es gibt noch einige mehr...). Dann brauchst du dich gar nicht mehr Gedanken um die Ids machen, sondern dies erledigt dann der ORM automatisch (sobald Foreign-Keys in der DB angelegt sind).
P.S: Hast du dich bei deinem ersten Beitrag nicht zwischen Child und Parent vertan, denn üblicherweise hat eine Child-Tabelle ja eine Parent-Id (nicht umgekehrt)?
didi_12 - So 12.08.12 13:29
Hallo,
vielen Dank für die Antwort. Ich werde das ganze also mit dem EF realisieren müssen ? Sprich nochmal von vorne ?
Das macht sicher Sinn. Wozu dient dann der Database Designer, in dem ich die entsprechenden Objekte zu den Tabellen selbst herstelle und auch verknüpfe, der dann entsprechende TableAdapter-Objekte generiert. Damit kann ich dann wohl auf die einzelnen Tabellen in der DB lesend und schreibend zugreifen, aber nicht wirklich Relationen im schreibenden Zugriff abbilden ?
Danke
Dieter
Th69 - So 12.08.12 14:09
Hallo Dieter,
ich habe noch mal ein bißchen recherchiert (da ich selber die typisierten DataSets bzw. TableAdapters nur erst einmal eingesetzt hatte).
Es scheint dafür die generierte
TableAdapterManager [
http://msdn.microsoft.com/de-de/library/bb384426.aspx]-Klasse zu geben (sobald "Hierarchical Update" auf true gesetzt ist - ab VS 2010 wohl standardmäßig so), welche genau für das Updaten von Foreign-Key Beziehungen gedacht ist - vllt. hilft dir das ja schon...
didi_12 - So 26.08.12 21:30
Th69 hat folgendes geschrieben : |
Hallo Dieter,
ich habe noch mal ein bißchen recherchiert (da ich selber die typisierten DataSets bzw. TableAdapters nur erst einmal eingesetzt hatte).
Es scheint dafür die generierte TableAdapterManager [http://msdn.microsoft.com/de-de/library/bb384426.aspx]-Klasse zu geben (sobald "Hierarchical Update" auf true gesetzt ist - ab VS 2010 wohl standardmäßig so), welche genau für das Updaten von Foreign-Key Beziehungen gedacht ist - vllt. hilft dir das ja schon... |
Hallo,
vielen Dank. Sicher der richtige Ansatz, soweit ich das gelesen und verstanden habe. Ich habe das nun probiert und renne in einen Fehler, ich weiss aber nicht, wie ich den gefixed kriege
C#-Quelltext
1:
| MessageBox.Show(Convert.ToString(oPostkriegDataSet_TableAdapterManager.UpdateAll(this.oPostkriegDataSet))); |
Diese Zeile führt zu diesem Laufzeit-Fehler:
Object reference not set to an instance of Object.Systems.Collections.ListDictionaryPostkrieg2
Wenn ich Debugge sehe ich, dass das Datenset definiert ist, allerdings beim Hovern mit der Maus über das TableAdapterManager-Objekt kriege ich "No overload for method UpdateAll takes 0 arguments". Das Datenset ist aber definiert und war für das Kompilieren auch das richtige Objekt (offensichtlich).
Weiss jemand, wo ich da ansetzen muss ?
Danke
Dieter
didi_12 - So 26.08.12 21:57
Es scheint, dass der TableAdapterManager selbst nicht instantiiert ist. Wie muss ich vorgehen um hier eine gültige Objektinstanz zu erzeugen ?
C#-Quelltext
1:
| oPostkriegDataSet_TableAdapterManager = new Postkrieg2.DataSet_Postkrieg2_Direct_To_SQLDatabaseTableAdapters.TableAdapterManager(); |
Das scheint es jedenfalls nicht zu tun bzw. nicht auszureichen ?
Danke
Dieter
didi_12 - So 09.09.12 19:26
Hallo,
hat irgendjemand eine Idee, würde mir sehr helfen !
Danke
Dieter
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!