none
1:n Beziehung Relatete Table RRS feed

  • Frage

  • Hallo !

    Ich habe 3 Tabellen  Kunden, Kunden_Telefonnummer, Telefonnumer
    Kunden:
    KundenID = Primärschlüssel Int
    Name .. varchar(50)
    Ort ... varchar(50)

    Kunden_Telefonnummer:
    KundenID = Primärschlüssel Int
    TelefonID = Fremdschlüssel Int

    Telefonnumer:
    TelefonID = Primärschlüssel Int
    Telefonnummer varchar(15)

    So, ich soll auf eine Form die Kunden_Namen, den Ort und darunter die 1:n Telefonnnumern anzeigen.
    Also brauche ich in der DatenQuelle Ansicht direkt unter der Tabelle Kunden  (aber noch in der Tabelle) die Telefonnummern !!!

    Ich hab das in meiner Ausbildung vor einem Jahr gelernt und hab das damals auch sicher 10-15 mal gemacht.
    Aber ich bekomm das jetzt nicht mehr hin.
    Mein Problem ist ich brauch ein DataSet in dem ich eine KundenTable bekomme an der unten die Table Telefonnummer angehängt ist, so daß ich Sie als related auf das Formular setzen kann.

    Man muß irgendwo unten bei den Tableadapter, Bindingsource oder so irgendwas umstellen.
    Hab auch schon die Videos von Bath Massi die das behandeln durch gesehen, darin beschreibt Sie alles schön bloß nicht wie man zu dem realtetem Table kommt .... gr, da verwendet sie schon fertig relatede Tables . Sitz schon 2 Tage an dem und komm nicht weiter.
    Das sollte eigentlich alles nur ein Sache von paar Minuten sein, wenn man weiß wies geht .... !!!

    Danke für hilfe.


    Sonntag, 3. April 2011 16:40

Antworten

  • Hallo Werner,

    wenn Deine Datenbank so erstellt wurde, dass Verknüpfungen (Relationen) bereits dort definiert wurden (das geht zum Beispiel auch durch die Erstellung eines Datenbankdiagrammes) dann würde nach dem Hinzufügen eines neuen Elementes (namens 'ADO.NET Entity Data Model') die Struktur quasi ohne jegliche Anpassung automatisch generiert werden! Der Quellcode zum Zugriff würde dann etwa so generiert werden:

      DeineEntities db = new DeineEntities(); 
      Kunden k = db.Kunden.First(); 
      MessageBox.Show(k.Kunden_Telefonnummer.Telefonnummer.Telefonnummer1); 
      // ok, hier wegen Namens-Konvention später verbessern
    
    

    Der EF Generator erstellt dann also automatisiert sogenannte NavigationsEigenschaften (oder hier), über die Du die anderenverknüpften Tabellen erreichen kannst.

    Kurz zur Struktur: es ist schon etwas ~eigen, in diesem Fall eine zusätzliche Zwischen-Tabelle (Kunden_Telefonnummer) zu benutzen. Man kann ja auch in der Kunden-Tabelle schon die TelefonID haben - aber ok, hat sicher Gründe.


    ciao Frank
    Montag, 4. April 2011 06:44

Alle Antworten

  • Also wenn du das ADO Entity model aus deiner DB erstellst und die Relationen in der DB richtig erstellt hast dann hast du in dem DB Object wiederum ein Object was das Child Object beinhaltet.
    Sonntag, 3. April 2011 18:46
  • @Brian: danke für deine Antwort. Aber hab nichts verstanden  ... :-(.

    Sonntag, 3. April 2011 18:51
  • Hallo Werner,

    um dir zu helfen brauchen wir mehr Infos : Nutzt du klassisch ADO.NET oder schon einen O/R Mapper wie Entity Framework oder evtl. auch Linq2SQL ?

    Was ich an deiner Tabellenstruktur merkwürdig finde :

    Wo ist denn die Beziehung zwischen Kunden und Kunden_Telefonnummer ? Da fehlt dir also noch ein Fremdschlüssel.

    Kunden_Telefonnummer:
    KundenID = Primärschlüssel Int
    TelefonID = Fremdschlüssel Int

    Kunden:
    KundenID = Primärschlüssel Int
    Name .. varchar(50)

    Ort ... varchar(50) 

    Grüße

    Pawel


    Montag, 4. April 2011 06:36
  • Hallo Werner,

    wenn Deine Datenbank so erstellt wurde, dass Verknüpfungen (Relationen) bereits dort definiert wurden (das geht zum Beispiel auch durch die Erstellung eines Datenbankdiagrammes) dann würde nach dem Hinzufügen eines neuen Elementes (namens 'ADO.NET Entity Data Model') die Struktur quasi ohne jegliche Anpassung automatisch generiert werden! Der Quellcode zum Zugriff würde dann etwa so generiert werden:

      DeineEntities db = new DeineEntities(); 
      Kunden k = db.Kunden.First(); 
      MessageBox.Show(k.Kunden_Telefonnummer.Telefonnummer.Telefonnummer1); 
      // ok, hier wegen Namens-Konvention später verbessern
    
    

    Der EF Generator erstellt dann also automatisiert sogenannte NavigationsEigenschaften (oder hier), über die Du die anderenverknüpften Tabellen erreichen kannst.

    Kurz zur Struktur: es ist schon etwas ~eigen, in diesem Fall eine zusätzliche Zwischen-Tabelle (Kunden_Telefonnummer) zu benutzen. Man kann ja auch in der Kunden-Tabelle schon die TelefonID haben - aber ok, hat sicher Gründe.


    ciao Frank
    Montag, 4. April 2011 06:44