M:N-Relation Problem

  • VB.NET
  • .NET 4.5

Es gibt 54 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Hallo

    Weil mich mein Ansatz jetzt selbst ein wenig interessiert hat habe ich mal einen kleinen Test mit einem "schnellen" Code erstellt.
    Das Serialisieren funzt sogar.

    Mit folgenden Code:

    VB.NET-Quellcode

    1. Dim test1 As New Article
    2. test1.ArticleGuid = Guid.NewGuid
    3. test1.ArticleName = "Testartikel"
    4. test1.Attributes = New List(Of Object)
    5. Dim attr1 As New WeightAttribute
    6. attr1.AttributeGuid = Guid.NewGuid
    7. attr1.Description = "Gewichtinfos"
    8. attr1.Attribute = New WeightInfo With {.BruttoWeight = 740, .NettoWeight = 710}
    9. Dim attr2 As New SizeAttribute
    10. attr2.AttributeGuid = Guid.NewGuid
    11. attr2.Description = "Abmessungen"
    12. attr2.Attribute = New SizeInfo With {.Height = 35, .Width = 60, .Depth = 30.2}
    13. test1.Attributes.Add(attr1)
    14. test1.Attributes.Add(attr2)
    15. test1.Serialize()



    bekomme ich folgendes XML generiert, welches ich auch wieder problemlos DeSerialisieren kann. Cool.

    XML-Quellcode

    1. <Article xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    2. <ArticleGuid>38e6e1d5-40b7-4e0a-a062-45101f86d116</ArticleGuid>
    3. <ArticleName>Testartikel</ArticleName>
    4. <Price>0</Price>
    5. <Attributes>
    6. <anyType xsi:type="WeightAttribute">
    7. <AttributeGuid>49f41dfb-2b02-4c3a-9a18-e5801bf061e6</AttributeGuid>
    8. <Description>Gewichtinfos</Description>
    9. <Attribute>
    10. <NettoWeight>710</NettoWeight>
    11. <BruttoWeight>740</BruttoWeight>
    12. </Attribute>
    13. </anyType>
    14. <anyType xsi:type="SizeAttribute">
    15. <AttributeGuid>8a9aa651-6783-4f33-aeef-aa409bf92add</AttributeGuid>
    16. <Description>Abmessungen</Description>
    17. <Attribute>
    18. <Width>60</Width>
    19. <Height>35</Height>
    20. <Depth>30.2</Depth>
    21. </Attribute>
    22. </anyType>
    23. </Attributes>
    24. </Article>


    Folgendes bringt mit die Ausgabe:


    PS: Natürlich für WinForms und diesen typisierten Datasets vermutlich nicht zu gebrauchen, wollte es dennoch schnekk man probieren.

    Grüße
    Sascha
    Dateien
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.
    @na_Icke Wie sieht es aus jetziger Sicht mit einem anständigen Thread-Titel aus :?: X(
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    VB-Fragen über PN / Konversation werden ignoriert!
    @ EDR und natürlich auch an alle anderen
    Ich habe die M:N Relation versucht zu verstehen und habe sie auch versucht umzusetzen. Ich habe mich an deinem Video orientiert und kann mir so wie im Video die einzelnen Werte zu einer bestimmten Eigenschaft anzeigen lassen. Wie aber weise ich jetzt meinem Artikel seine Eigenschaften zu. Also artikel 1 soll über Eigenschaft Länge,Seite und Verstärkung verfügen. Das raff ich jetzt überhaupt nicht.
    haste mal einen m:n - view gestartet?
    Da kannste ja einer Kategorie beliebig viele Lieferanten zuordnen.
    Nu geh da in die Kategorie-Detail-Tabelle, und lege die Kategorien Länge,Seite und Verstärkung an.
    Dann geh in die Lieferanten-Detail-Tabelle, und lege die Lieferanten Artikel1, Artikel2, Artikel3 an.

    dann geh wieder in die m:n - ansicht und spiel mit rum.
    bei mir ist es eher so das ich für einige Artikel mehrere Lieferanten habe. Die Kategorisierung dienst lediglich der Einteilung ob es Reinigungsmittel, Ersatzteile oder Bürobedarf ist. da benötige ich keine Relätion zum Lieferanten. Die einzelnen Eigenschaften habe ichja schon angelegt und seine entsprechenden Werte.
    Jetzt muss ich ja irgendwie meinem Artikel sagen du verfügst über 4 Eigenschaften. Oder versteh ich etwasd falsch an deiner Aussage.
    ich wollte dir mitteilen, dass im Tut-Code bereits eine Lösung deines Problems lauffähig vorhanden ist.
    Sie ist nur anders benannt.
    Eigenschaft

    Bei mirBei dir
    CategoryArtikel
    ArtikelArtikelEigenschaft
    DelivererEigenschaft


    Du kannst also, wo bei mir "Category" drüber steht, einfach deine Artikel eintragen.
    Und wo bei mir "Deliverer" drüber steht, schreib deine Eigenschaften rein.

    Und schon kannste deinen Artikeln Eigenschaften zufügen.
    Hallo,

    ich denke ich hab es hinbekommen, aber bei Anlage eines neuen Artikels und den gleichzeitigen zuweisen der Eigenschaften erhalte ich folgende Fehlermeldung. Liegt es daran weil zu diesem Zeitpunkt der Artikel noch nicht vorhanden ist? Ich nutze die von dir, EDR, in einem Video vorgeschlagene Add-Funktion mittels Dialogform. Ich möchte aber erst den Datensatz übernehmen wenn ich auf OK drücke da ich die Cancel-Funktion ebenfalls nutzen möchte. Hast du einen Tipp für mich oder wer anderes?
    da ist von ForeignKeys - die rede, für mich deutet das auf einen Fehler im Datenmodell hin - insbes. bei den Beziehungen - wird ja auch gesagt, welche es ist.
    Ich glaub du verwendest eine einer hässlichen Tabellen - die mit dem 4-fachen Schlüssel - die ich dir ja langfristig aufzugeben empfehle (weils dann letztendlich schneller geht).
    Das würde auch bedeuten, mein Tutorial haste nicht sehr gut verstanden, bzw meinst, stark davon abweichen zu können.

    zeig doch mal Screenshot von deim Dataset, wie's jetzt ist.
    hier das dataset:


    ich hab mir auch mal eine Form aufgemacht und habe die entsprechenden Datagrids draufgeszogen. Das zum anlegen der Artikel, dann das für die Eigenschaften und nur die Eigenschaften.
    Wenn ich dort einen Artikel anlege, dann in das Datagrid gehe mit den ArtikelEigenschaften und dort welche reinschreibe klappt es. Ich kann auch in der Eigenschaftentabelle eine Eigenschaft auswählen und er zeigt mir dann nur die Artikel an die diese Eigenschaft haben. ich kann es auch speichern. So geht es, aber wenn ich das in der Dialogform mache, dann kommt dieser Fehler.
    hier die Form wo ich das draufgezogen hab.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „na_Icke“ ()

    wie darf ich das verstehen? was kann ich machen'? zu was könntest du mir raten wie ich vorgehen kann. Zum Zeitpunkt des anlegens der daten ist der Datensatz ja noch nicht im Dataset, erst wenn ich ok drücke. Wenn ich das wie auf meinem 2 ten Bild im Post 30 mache funktioniert es ja. ich möchte aber erst die daten übernehmen wenn der User OK drückt.
    Hallo an alle,

    sorry das ich so lang nicht da war aber ich habe einfach keine Zeit gefunden an meinem Projekt weiter zu tüffteln.
    @EDR ich denke ich habe es verstanden und auch gelöst bekommen. Jetzt habe ich mal eine weitere Frage und hoffe du/Ihr könnt mir einen Tipp geben.
    Ich habe die Eigenschaften erfolgreich angelegt. Über ein Datagrid kann ich jetzt jedem Artikel seine Eigenschaft zuweisen aber dafür müsste ich jedesmal den Artikel auswählen und ihm seine erste Eigenschaft zuweisen(mittels Comboboxen im DGV), dann seine zweite etc. das finde ich persönlich nicht so schön. Checkboxen wären da sinnvoller. wenn ich jetzt meinen Eigenschaftentable eine weitere Spalte mit Checkboxen hinterlege, wie bekomme ich jetzt die daten zusammengefriemelt das ich in meiner ArtikelEigenschaftetable sage das die die ArtikelID 1 die EigenschaftenID 1,2 und 4 hat. Sollte ich mich nicht verständlich genug ausgedrückt haben, dann fragen. Das Dataset aus Post 30 hat noch Bestand.

    Vielen Dank
    Ein Artikel hat unterschiedliche Anzahl von Eigenschaften. Die möchte ich gerne über checkboxen auswählen. Artikel wird angelegt. Daneben befinden sich alle möglichen Eigenschaften die ich zusweisen könnte und zwar aufgelistet als checkboxen. Demzufolge sollen alle angehakten Boxen für den Artikel gespeichert werden. Wahrscheinlich kann ich mit den bestehenden dataset so nicht arbeiten. Da ich die Anzahl der Eigenschaften variabel halten will. Vielleicht hast du ja einen Tipp wie ich das anders angehen kann.
    na, da würde ich die Eigenschaften im DGV anzeigen, mit einer zusätzlichen ungebundenen CheckboxColumn.
    Und codeseitig etwas basteln, was beim Checken einen Zuordnungs-Datensatz generiert, bzw. beim Unchecken diesen Zuordnungs-Datensatz wieder entfernt.
    Im DGV_CellFormatting/Parsing könnte man sich drum kümmern, den Value der Checkbox auf True/False festzulegen, je nach Existenz eines Zuordnungs-Datensatzes.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()