DataRow.GetParentRow(relations) - Wie geb ich die Relations an ???

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    DataRow.GetParentRow(relations) - Wie geb ich die Relations an ???

    Moin,

    ich hab in einem Dataset 2 Tabellen, nennen wir sie mal Tabelle A und Tabelle B. Tabelle A hat eine 1:n Relation zu Tabelle B. Nun will ich aus einer gegebenen DataRow aus Tabelle B einen Wert aus der ParentTabelRow abfragen.

    Auf die ChildRows von Tabelle A kann ich mit row.GetTabelleARows zugreifen, das weis ich schon. Wie mache ich das aber umgekehrt?
    Es scheint keine benamte GetTabelleARow Methode zu geben, was ich gefunden habe, ist GetParentRow, dazu muss ich aber eine Relation angeben. Klar nun kann ich einfach "FK_TabelleA_TabelleA" eintragen, aber welchen Sinn hat das wenn ich über all sonst in einem Typ.DataSet ohne solche Aufrufe klar komme, sie hier dann doch zu benutzen?
    Machen wir es mal konkreter. Du hast ne Tabelle Companies und ne Tabelle Cars.

    Du hast dann ein paar Firmen und Automarken hinzugefügt.
    Um jetzt von einem bestimmten Auto auf die Firma zuzugreifen, nutzt du die konkret über das Auto verfügbare CompaniesRow, hier für das letzte Auto in der Tabelle.

    VB.NET-Quellcode

    1. Dim CompanyOfLastCar = Tds.Cars.Last.CompaniesRow
    Es gibt also keine Funktion namens GetCompaniesRow, sondern es ist eine Property, die einfach nur CompaniesRow heißt.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    VaporiZed schrieb:

    Tabelle Companies und ne Tabelle Cars
    Man sollte die Benamung der Tabellen in der Einzahl halten. Das unterstützt dann die automatische vertändliche Benamung des Datasetgenerators…

    VB.NET-Quellcode

    1. Private Sub GetCompany_Click(sender As Object, e As EventArgs) Handles btnGetCompany.Click
    2. lblCompany.Text = DirectCast(DirectCast(CarBindingSource.Current, DataRowView).Row, CarRow).CompanyRow.NameCompany
    3. End Sub
    Hier wird beim aktuell ausgewählten Auto sein Hersteller ausgegeben...

    VB1963 schrieb:

    Man sollte die Benamung der Tabellen in der Einzahl halten.
    ist und bleibt ne Glaubensfrage. Ich belass es bei Plural, weil ich häufig Konstrukte habe wie:

    VB.NET-Quellcode

    1. For Each Company In Tds.Companies

    Da fände ich es irreführend, wenn ich schreibe:

    VB.NET-Quellcode

    1. For Each Company In Tds.Company

    Das ist wie die Frage, ob man einen Arraynamen im Singular der Plural gestaltet. Denn dort arbeite ich auch eher im Plural. Und da ergibt sich die Parallele:

    VB.NET-Quellcode

    1. If Tds.Companies(0).Name = "whatever" Then
    und nicht

    VB.NET-Quellcode

    1. If Tds.Company(0).Name = "whatever" Then
    . So schreibe ich es bei Arrays und bei DataTable-Zeilen. Und ich vermute, dass nicht wenige User ebenfalls Arraynamen im Plural verwenden. Aber das ist purer Spekulatius.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „VaporiZed“ ()

    VaporiZed schrieb:

    ist und bleibt ne Glaubensfrage. Ich belass es bei Plural
    Die Singular-Empfehlung kommt ursprünglich aus dem SQL-Bereich.
    Wenn man z.B. eine Abfrage auf einen geJOINten Tabellenverbund machen will

    SQL-Abfrage

    1. ​SELECT User.Name, Address.City, Address.Street, Company.Name FROM ...
    liest sich das im Singular besser.


    Weil Singular zum Standard wurde, hängen manche Entity-Generatoren für die Collections ein ​s an die Tabellennamen an.
    Was dann bei Begriffen mit nicht englischer Standard-Plural-Bildung teilweise merkwürdige Konstruktionen ergibt.
    Da gibt es dann bei deutscher Benennung Benutzers und Orts oder auch in englisch Adresss oder Companys, weshalb ich von solchen pseudointelligenten Automatismen wenig halte.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --