DatenModellierung Problem (Veranstaltung eines Vereins)

  • C#
  • .NET (FX) 4.5–4.8

Es gibt 139 Antworten in diesem Thema. Der letzte Beitrag () ist von Nofear23m.

    Hi,
    Danke Dir, das war verständlich, wobei, eine Frage noch... Du schreibst, wenn das Model Serialisiert werden soll, dafür gibt es dann die ViewModelBase<TModel> richtig?
    Wann nimmt man die her? Also, da haperts bei mir, das ich meist nie genau weis, wann ich die ViewModelBase brauche und wann die generische ViewModelBase<TModel>. (Vielleicht an meinem Model kurz erläutert?)
    Das mit den DataAnnotations habe ich auch schon mal gelesen und versucht umzusetzen,d as war nix :(

    Du kannst es gerne mal einbauen, ich frag dann nach wenn was unklar ist.
    "Hier könnte Ihre Werbung stehen..."
    Hallo

    ViewModelBase ist einfach eine Basisklasse. Die wohl einfachste erklärung ist das eine Basisklasse die Basis für andere Klassen ist.

    Beispiel:
    Du willst verschiedene Fahrzeuge abbilden. LKW, PKW, Motorrad, Schiff, Flugzeug, usw.
    Alle haben eine gemeinsame Basis. Alle haben Endgeschwindigkeit, Antriebsart, Farbe, usw.
    Diese gemeinsamkeiten können in die Basisklasse, sohin haben alle Fahrzeuge welche von dieser Basisklasse erben diese Eigenschaften. Aber auch noch eigene wie das ein LKW Achsenanzahl, das Schiff aber wieder einen Tiefgang.
    Auch können Sie gemeinsame Logik haben, aber jedes für sich auch eigene.

    Dieses Beispiel kann auch noch weiter ausgebaut werden. Beispielsweise kann ich eine FahrzeugBase haben.
    Dann noch WasserfahrzeugBase, LuftfahrzeugBase und StrassenfahrzeugBase. Alle drei Klassen erben von FahrzeugBase. Und ein Flugzeug erbt dann von LuftfahrzeugBase.
    Somit erbt ein Airbus 380 die Eigenschaften von FahrzeugBase UND FlugzeugBase.

    Ich hoffe das kahm verständlich rüber.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Hallo

    Hab total vergessen zu Fragen. Wie willst du die Daten später speichern/verarbeiten?
    EF Core, Serialisierung?

    Weil die Models würden für beides anders aussehen!

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    :D Klassisch aneinander vorbei geredet...
    BasisKlasse ist klar. Was mich immer etwas verwirrt ist die generische Basisklasse ViewModelBase<TModel>

    Soweit ich es verstanden habe, sorgt die generische Klasse dafür, das ein ViewModel, welches von ViewModelBase<TModel> erbt, direkt seinen ModelTyp kennt.

    Beispiel in meinem Projekt mit generischer Basis wäre:

    C#-Quellcode

    1. public class EventViewModel:ViewModelBase<EventModel>
    2. {
    3. public EventViewModel(EventModel model):base(model)
    4. { }
    5. public string EventName
    6. {
    7. get
    8. {
    9. return Model.EventName;
    10. }
    11. set
    12. {
    13. if(Model.EventName != value)
    14. {
    15. Model.EventName = value;
    16. OnPropertyChanged();
    17. }
    18. }
    19. }
    20. }


    Und ohne generische Basis:

    C#-Quellcode

    1. public class EventViewModel:ViewModelBase
    2. {
    3. private string _eventName;
    4. public string EventName
    5. {
    6. get
    7. {
    8. return _eventName;
    9. }
    10. set
    11. {
    12. if(_eventName != value)
    13. {
    14. _eventName = value;
    15. OnPropertyChanged();
    16. }
    17. }
    18. }
    19. }


    Wo ist hier der Vorteil? oder warum nimmt man mal die generische und manchmal nicht?

    EDIT: speichern würde ich es gerne in eine MySQL DB, da der Großteil der Arbeit ja von externen Verkäufern gemacht wird und meist am Veranstaltungsort/Tag kein Internet zur Verfügung steht.
    "Hier könnte Ihre Werbung stehen..."

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

    Achso, ja.

    OK, Generische Basisklassen oder auch generische Klassen sind immer gut wenn du viele ViewModels hast welche gleiche Funktionalitäten haben.
    Wobei ich hier sogar dann immer zu einem Generischem Interface rate. Der Vorteil ist das ich immer mein PRoperty oder meine Prozeduren implementiert bekomme.

    Beispiel: Ich habe ein Interface IGenericModelViewModel(Of T As Class) welches das Property ModelObjekt As T definiert.
    Wenn ich nun ein ViewModel für einen User machen möchte dann hätte ich eine Klasse UserViewModel welche das Interface implementiert.

    Man kann hier alle Klassen reinreichen.
    Aber man kanns als Basisklasse auch machen. Richtig.

    EDIT:

    MichaHo schrieb:

    speichern würde ich es gerne in eine MySQL DB

    Manuell oder per EF?


    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    MichaHo schrieb:

    vermutlich über Webservice

    Naja, wir müssten da jetzt unterscheiden.

    Soweit ich mich erinnern kann willst/wolltest du ja wisse Dinge lokal speichern und gewisse wiederum über das Webservice. Das mit MySQL haben wir ja gelärt, das geht nur über ein Webservice da der Server von aussen ja nicht erreichbar ist. Das würde ich eben über eine ASP.Net Web API erledigen. Mittlerweile (mit ASP.Net Core) ist es ja auch Cross-Plattform Fähig und läuft ja sogar auf nem Linux soweit ich weis. Das gilt auch für EF Core.

    Also soll das Model eher für EF Core/Webservice Sync ausgelegt sein richtig?

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Hi,
    um auf jeden Fall auf der sicheren Seite zu sein denke ich ja, EF Core und Webservice.

    Im Grunde wird lokal nur die Seller und Article benötigt. Diese wiederum sollen über eine Webseite direkt vom Seller selbst erfasst werden.
    Ich kann mal schauen, das ich einen vorläufigen Ablaufplan erstelle, vielleicht wird es dann einfacher zu verstehen.
    "Hier könnte Ihre Werbung stehen..."
    Hallo

    Also ich habe mir das nun mal genauer angesehen und versucht mich da reinzudenken.

    Anbei ein Beispiel wie ich es machen würde, aber da ich nicht alle "realen" Abhängigkeiten kenne muss es so auch nicht passen.
    Was mich etwas störte: Das es Seller, Oranizer und so gab. Im Grunde sind das alles Personen, welche eben verschiedene Statis haben. Dann kann man normalisieren meiner Meinung nach.
    Ich habe es zusammengefasst und jede Person kann (muss aber nicht) Logindaten haben.

    Jede Person kann n Events zugeordnet sein und jeder Event kann n Seller haben. n:m also.
    Dies sollte wenn man mit Relationellen Datenbanken arbeitet mit einer Zwischentabelle abgebiltet werden. Ich habs PersonEventModel genannt.
    Was ich beim Event nocht nicht verstehe ist die Provision. Warum in Event? Bekommt nicht jeder Verkäufer für sich die Provision, unabhängig vom Event?
    Es können auf einem Event ja auch 5 Verkäufer sein und jeder von denen Verkauft was anderes und vorallem der eine mehr wie der andere.

    Du würdest hier eine weiteres Property im Event benötigen public ICollection<Sale> SoldArticles wo hinterlegt ist wer welches Produkt zu welchem Preis verkauft hat, woraus sich dann eine Provision berechnen(!!) lässt. Somit gibt es im Model im Grunde keine Provision. Die wird ja berechnet. Maximal gibt es später mal ne Tabelle wo du die ausgezahlten Provision abspeichern kannst. Zumindest wenn ich das vorgehen richtig verstehe. ?(

    Ich habs jetzt mal gelassen IDataErrorInfo und die Logik für die Validierung mit rein zu packen da ich nicht weis ob dir das im Grunde überhaupt so passt. Ich denke auch das hier ein neuer allgemeiner Thread besser ist.




    PS: Mein Model muss natürlich nicht das Maß aller Dinge sein, es gibt sicher Leute die sowas besser Modellieren können. Ich muss da bei meinen Models auch später immer "nachbessern".

    Grüße
    Sascha
    Dateien
    • Bazaar.zip

      (289,5 kB, 75 mal heruntergeladen, zuletzt: )
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

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

    Hi Sascha,
    Danke Dir erstmal für deine Unterstützung.

    Ich versuche mal etwas Licht ins Dunkle zu bringen:
    Ein Beispiel aus der Praxis:
    Es gibt einen Verein, nennen wir Ihn Förderverein KiTa Irgendwo, dies wäre im Modell der Organizer.
    Der Verein hat meist jemanden, der sich um Veranstaltungen kümmert, eventuell gibt es auch mehrere Personen, die sich um verschiedene Veranstaltungen kümmern.
    Hier wär die Frau Miriam Musterfrau die Verantwortliche (Responsible) für die Veranstaltung (Event) "Kleiderbasar"
    Frau Musterfrau legt fest, das die Veranstalter eine Provision von allen Verkäufern erheben, sie legt dies auf 20% fest, mindestens aber 5 €. Die Provision kommt der KiTa zugute, daher wird die Provision vom Umsatz der Verkäufer abgezogen!
    Nun verkündet Frau Musterfrau das und es melden sich 50 Frauen, die Ihre Sachen auf dieser Veranstaltung verkaufen wollen.
    Also erstellt Frau Musterfrau 50 Verkäufer und gibt diesen die Zugangsdaten um die Artikel zu erfassen (läuft im Moment alles über Excel -> Vorlage hänge ich mal dran).
    Nachdem die Verkäufer Ihre Artikel eingetragen haben, ihre Etiketten ausgedruckt und auf die Sachen geklebt, getackert oder sonstwie befestigt haben, kommen die Sachen zur Frau Musterfrau und der Veranstaltungsort wird eingerichtet.
    Während dem Verkauf werden die Etiketten in die Kasse getippt (oder später mal abgescannt).
    Am Ende errechnet Frau Musterfrau aus den Verkäufen den Umsatz für die Verkäufer und zieht die Provision (für den Veranstalter) ab.
    Die Provision geht an die KiTa, der Umsatz geht an die Verkäufer und die Veranstaltung ist beendet.

    Daher beinhaltet bei mir das Event die Provision. Weil man auch von Event zu Event unterscheiden soll, ob eine Proviosion erhoben wird oder nicht.
    Da Frau Musterfrau auch gleichzeitig selbst verkaufen kann, gibt es in Responsible die Propertie IsSeller.

    Da der Organizer keine reale Person ist, sondern eher eine Company (bzw. ein gemeinnütziger Verein oder Förderverein), müsste dafür eine eigene Klasse her.

    Ein Organizer kann viele Events haben, ein Event kann aber immer nur einen Organizer haben.
    Ein Organizer kann viele Responsible haben, aber ein Responsible gehört immer zu einem Organizer
    Ein Event kann viele Seller haben, hat aber immer nur einen Responsible
    Ein Seller kann viele Article haben, aber ein Article hat immer nur einen Seller (selbst wenn es das türkisblaue Jäckchen 5 mal gibt bei verschiedenen Verkäufern)

    Meinst Du wir bräuchten dafür einen neuen Thread? hier geht es doch immer noch um die Datenmodellierung
    Dateien
    • 1_Max.xlsx

      (29,66 kB, 71 mal heruntergeladen, zuletzt: )
    "Hier könnte Ihre Werbung stehen..."

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

    Gut, soweit masst aber mein Modell dann eh ganz gut.

    MichaHo schrieb:

    Frau Musterfrau legt fest, das die Veranstalter eine Provision von allen Verkäufern erheben, sie legt dies auf 20% fest, mindestens aber 5 €.

    OK, das passt dann soweit auch und ist mir jetzt klarer. Passt im Model auch.

    MichaHo schrieb:

    Da der Organizer keine reale Person ist, sondern eher eine Company (bzw. ein gemeinnütziger Verein oder Förderverein), müsste dafür eine eigene Klasse her.

    Ne, kann genauso mit PersonModel verwaltet werden. Wenn es ne Firma/Verein oder so ist ist in Vorname der Verinsname und in Nachname z.b. GmbH oder so drinnen.
    Und die Eigenschaft CanBeOranizer ist True. Oder man nennt die Eigenschaft IsOrganizer. Aber da ich denke das ein Oranizer auch etwas verkauften dürfte ist es so besser.

    MichaHo schrieb:

    Da Frau Musterfrau auch gleichzeitig selbst verkaufen kann, gibt es in Responsible die Propertie IsSeller.

    Und das sparst du dir mit meinem Model wieder. (CanBeSeller)

    MichaHo schrieb:

    Ein Organizer kann viele Events haben, ein Event kann aber immer nur einen Organizer haben.

    Haben wir - passt!

    MichaHo schrieb:

    Ein Organizer kann viele Responsible haben, aber ein Responsible gehört immer zu einem Organizer

    Wie? Ein Event hat doch Verantwortliche. Warum braucht der Organisator einen Veranwortlichen. Der Verantwortlicher ist doch für den Event verantwortlich und nicht für den Origanisator.
    Im Notfall könnte man aber sogar diesen bezug herstellen. Da es für einen Event einen Oranisator und einen Verantwortlichen gibt. Also kann der Verweis hergestellt werden.

    MichaHo schrieb:

    Ein Event kann viele Seller haben, hat aber immer nur einen Responsible

    Haben wir - passt!

    MichaHo schrieb:

    Ein Seller kann viele Article haben, aber ein Article hat immer nur einen Seller (selbst wenn es das türkisblaue Jäckchen 5 mal gibt bei verschiedenen Verkäufern)

    Haben wir - passt!

    MichaHo schrieb:

    Meinst Du wir bräuchten dafür einen neuen Thread? hier geht es doch immer noch um die Datenmodellierung

    Wäre mir schon lieber. Hier gehts definitiv um das Model eine Vereins. die Sache mit der Validierung von Daten ist allgemeiner - so tut sich jemand anderes der sowas sucht leichter das zu finden.

    Also wenn ich das richtig sehe passt mein Model soweit, das sollte so klappen und sollte auch direkt mit EF Core abbildbar sein.
    So wäre es auf jeden Fall eher normalisiert wie eingangs das die Personen zusammengefasst wurde.
    Du bekommst nämlich probleme wenn sonst ein Veranstallter auch ein Verkäufer werden soll oder wenn ein Verantwortlicher vieleicht mal gleichzeitig Organisator sein sollte, wie dann? Und das kann ja denke ich passieren wenn mal Personalmangel vorhanden ist. So bist du Flexibel. Einfach eine Eigenschaft in "Person" ändern und gut ists.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Nofear23m schrieb:

    Wäre mir schon lieber. Hier gehts definitiv um das Model eine Vereins
    OK, wird gemacht. gehe nur noch kurz auf die Antworten ein.

    Nofear23m schrieb:

    Veranstallter auch ein Verkäufer werden soll


    Sagen wir, es gibt später in der Datenbank 12 Veranstalter (organizer)
    Jeder hat 4 Verantwortliche (Responsible)
    1 für nen Kleiderbasar, 1 für ein Kindergartenfest, ein anderer wieder für ein Eltern-Kind Kaffee what ever...

    Nofear23m schrieb:

    Verantwortlicher vieleicht mal gleichzeitig Organisator

    Der Veranstalter ist aber kein Verkäufer auf dem Kleiderbasar, DAS ist der Verantwortliche... der Verantwortliche kann sich bei Personalmangel ändern, OK, aber der Veranstalter bleibt der gleiche.
    Es kann auch durchaus vorkommen, das der Veranstalter an einem Tag 3 Veranstaltungen hat mit 3 unterschiedlichen Verantwortlichen.

    Wenn man es nochmal als Firma sieht, wäre Organizer = Firma Wasser- und Abwasser GmbH und Responsible = Chef, Buchhalter, Itler, Marketing oder so und Events wären Audit, Finanzprüfung, Grillfest what ever.

    Also wäre im Modell der Organizer nach meinem Denken die Haupttabelle, dann Events, dann seller, dann article und der Responsible eine Nebentabelle zu Events.

    So, nun öffne ich nen neuen Thread und verlinke hierher
    "Hier könnte Ihre Werbung stehen..."

    MichaHo schrieb:

    Sagen wir, es gibt später in der Datenbank 12 Veranstalter (organizer)
    Jeder hat 4 Verantwortliche (Responsible)
    1 für nen Kleiderbasar, 1 für ein Kindergartenfest, ein anderer wieder für ein Eltern-Kind Kaffee what ever...

    Aber da sagst es ja selbst. Das Wiederspricht sich doch.
    Für den Kleinerbasar soll ein anderer Verantwortlich sein können wie für das Kindergartenfest. Unabhängig davon wer der Organistor von beiden Festen ist.
    Spiel das mal durch uns schau nach ob mit meinem Model eine Konstellation nicht möglich wäre.

    MichaHo schrieb:

    Der Veranstalter ist aber kein Verkäufer auf dem Kleiderbasar

    OK, muss ja auch nicht, kann aber wenn es dennoch mal der Fall sein sollte. Könnte ja mal passieren, dann gebe es das Model aber her.

    MichaHo schrieb:

    Es kann auch durchaus vorkommen, das der Veranstalter an einem Tag 3 Veranstaltungen hat mit 3 unterschiedlichen Verantwortlichen.

    Klappt auch mit meinem Model

    MichaHo schrieb:

    Wenn man es nochmal als Firma sieht, wäre Organizer = Firma Wasser- und Abwasser GmbH und Responsible = Chef, Buchhalter, Itler, Marketing

    Ja, aber dennoch dreht sich alles um die Events. Ein Event hat einen Organisator und einen Verantwortlichen. Jeder Organisator kann X Events haben. Jedes Event hat jemanden der für dieses Verantwortlich ist.
    Jede Person kann für X Events verantwortlich sein. Nämlich jedes Event wo diese Person als Verantwortlicher eingetragen ist.

    Ein Tipp.
    Nimm das Model her und trage einfach simple Beispieldaten in eine List(Of) ein.
    Oder schreibe einfach ein paar Beispiele mit Beispielpersonen auf uns sehe ob dies abbildbar ist.
    Das ist nicht mal umsonst, du kannst diese Beispieldaten dann gleich für Designtime und/oder für die DB zum testen hernehmen. Also das die EF Core diese Beispieldaten dann beim anlegen der DB einträgt, so hast du immer Testdaten mit welchen du dich spielen kannst.

    Vieleicht hast du ja auch PDFs, Excel oder sonst was wo ein paar Daten aus Vergangenen Veranstalltungen drinnen stehen, diese versuche einfach mal in diesem Model abzubilden. Das siehst du schnell was nicht passt oder wo dir Eigenschaften fehlen.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Hi,
    OK, das war glaub hilfreich.
    Ich hab mal ein Consolen Projekt dran geklemmt und dort eine Seed Methode erstellt.

    vom tippen her ist es schon ein gefummel muss ich sagen, aber vom anzeigen her und vom abfragen sieht das wirklich ganz gut aus:



    die Seed Methode:

    C#-Quellcode

    1. static void Seed()
    2. {
    3. List<EventModel> eventList = new List<EventModel>();
    4. eventList.Add(
    5. new EventModel()
    6. { EventName = "Kleiderbasar", EventDate = DateTime.Now.AddDays(-14), Provision = 10, MinProvision = 5,
    7. Organizer = new PersonModel() { FirstName = "Förderverein KiTa", LastName = "Kunterbunt e.V.", IsOrganizer = true },
    8. ResponsiblePerson = new PersonModel() { FirstName = "Michael", LastName = "Hoffmann", IsSeller = true },
    9. Sellers = new List<PersonEventModel>() { new PersonEventModel()
    10. { Person = new PersonModel()
    11. { FirstName = "Maria", LastName = "Muster",Articles = new List<ArticleModel>(){ new ArticleModel()
    12. { ArticleNumber = 123, Description = "Spiel - Schnappt Hubi",Price = 2.5m, Quantity = 1 },
    13. new ArticleModel()
    14. { ArticleNumber = 456, Description = "türkisblaue Jacke",Price = 5, Quantity = 1 }
    15. }
    16. } },new PersonEventModel()
    17. { Person = new PersonModel()
    18. { FirstName = "Helga", LastName = "WatWeisIch",Articles = new List<ArticleModel>(){ new ArticleModel()
    19. { ArticleNumber = 789, Description = "bunte Hose",Price = 0.5m, Quantity = 1 },
    20. new ArticleModel()
    21. { ArticleNumber = 1011, Description = "Häßliche Mütze",Price = 25, Quantity = 1 }
    22. }
    23. } } },
    24. });
    25. foreach (var item in eventList)
    26. {
    27. System.Console.WriteLine("Veranstaltungsname: " + item.EventName);
    28. System.Console.WriteLine("Veranstaltungstag: " + item.EventDate);
    29. System.Console.WriteLine("erstellt am:" + item.CreatedOn);
    30. System.Console.WriteLine("Veranstalter: " + item.Organizer.FullName);
    31. System.Console.WriteLine("Verantwortlicher: " + item.ResponsiblePerson);
    32. foreach (var sel in item.Sellers)
    33. {
    34. System.Console.WriteLine("Verkäufer: " + sel.Person.FullName);
    35. foreach (var art in sel.Person.Articles)
    36. {
    37. System.Console.WriteLine("Artikel: " + art.Description + " zum Preis von: " + art.Price);
    38. }
    39. }
    40. }
    41. }
    "Hier könnte Ihre Werbung stehen..."
    Na schau. Also denke ich passt das so richtig?
    Und so bist du viel Flexibler da jede Person (egal ob Firma, Person, Verein) alles sein kann. Ob Veranstalter, Verantwortlicher, Verkäufer oder sogar Kunde.
    Was ist wenn es später mal notwendig wird, dann bist du mit dem Model gewappnet.

    Jetzt braucht es nur noch ein paar DataAnnotations und ein paar Zeilen Fluent API und schon hast du ein Entity Framework Model und kannst jede DB befüllen.

    Sollte noch was unklar sein melde dich einfach.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Nofear23m schrieb:

    Sollte noch was unklar sein melde dich einfach.


    Nofear23m schrieb:

    und ein paar Zeilen Fluent API

    :D haste schon selbst beantwortet was unklar ist ^^
    Ich hardere zwar noch mit mir weil ich momentan keine Idee habe wie ich das nachher im ViewModel abbilde, bzw. wie ich erst eine Organisation anlege ohne ein Event zu haben und das dann der Verantwortliche der Organisation das Event anlegt.... jetzt implementiere ich aber erst mal iDataErrorInfo in die Models. (Video Tut hab ich mir schon angeschaut)
    "Hier könnte Ihre Werbung stehen..."

    MichaHo schrieb:

    Ich hardere zwar noch mit mir weil ich momentan keine Idee habe wie ich das nachher im ViewModel abbilde

    Das wird dann schon. Bin ja da :P

    MichaHo schrieb:

    wie ich erst eine Organisation anlege ohne ein Event zu haben und das dann der Verantwortliche der Organisation das Event anlegt....

    VB.NET-Quellcode

    1. 'Organisator anlegen (hat keinerlei Events)
    2. Dim org1 As New PersonModel() With {.FirstName = "Sascha", .LastName = "Patschka", .Email = "patschka.sascha@live.com",
    3. .CanBeOrganizer = True, .License = LicenseTypeEnum.Light, .Street = "Teststraße 12", .City = "Wiener Neustadt", .PostalCode = "2700"}
    4. org1.AccessData = New LoginDataModel() With {.UserName = "NoFear23m", .IsActive = True}
    5. 'später wird mal ein Event angelegt (im zuge dessen kann ein vorhandener Organisator festgelegt werden)
    6. Dim ev1 As New EventModel() With {.Organizer = org1, .EventName = "TestEvent"}


    Das mit der FLuent API von EF Core besprechen wir wenn es dann soweit ist, ist nicht schlimmt.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    witzig, genau da bin ich drauf gestoßen, habs einfach probiert so wei mein Kopf das abbilden würde.

    Hänge nur an einer Stelle, nämlich den Articeln den richtigen Verkäufer mit zu geben:

    C#-Quellcode

    1. static void Seed2()
    2. {
    3. PersonModel organizer = new PersonModel() {FirstName = "Förderverein", LastName = "KiTa Kunterbunt e.v.", IsOrganizer = true, License = LicenseTypeEnum.Free };
    4. PersonModel responsible = new PersonModel() { FirstName = "Harald", LastName = "Muster", Email = "harald@muster.com", IsSeller = false };
    5. EventModel basar = new EventModel();
    6. List<PersonModel> sellers = new List<PersonModel>();
    7. List<ArticleModel> articles = new List<ArticleModel>();
    8. sellers.Add(new PersonModel(){ FirstName = "Maria", LastName = "Muster", SellerNumber = 1 });
    9. sellers.Add(new PersonModel() { FirstName = "Helga", LastName = "WatWeisIch", SellerNumber = 2 });
    10. sellers.Add(new PersonModel() { FirstName = "Irmtraut", LastName = "HasteNichtGesehen", SellerNumber = 3 });
    11. //hier hänge ich
    12. articles.Add(new ArticleModel() { ArticleNumber = 123, Description = "Spiel - Schnappt Hubi", Price = 2.5m, Quantity = 1, Person = sellers.Find(s => s.SellerNumber = 1). });
    13. articles.Add(new ArticleModel() { ArticleNumber = 456, Description = "türkisblaue Jacke", Price = 5, Quantity = 1 });
    14. articles.Add(new ArticleModel() { ArticleNumber = 789, Description = "bunte Hose", Price = 0.5m, Quantity = 1 });
    15. articles.Add(new ArticleModel() { ArticleNumber = 1011, Description = "Häßliche Mütze", Price = 25, Quantity = 1 });
    16. articles.Add(new ArticleModel() { ArticleNumber = 1012, Description = "Jacke", Price = 2, Quantity = 1, Size = "140/146" });
    17. articles.Add(new ArticleModel() { ArticleNumber = 1013, Description = "Hose", Price = 4, Quantity = 1 });
    18. articles.Add(new ArticleModel() { ArticleNumber = 1014, Description = "Turnhose", Price = 1, Quantity = 2 });
    19. articles.Add(new ArticleModel() { ArticleNumber = 1015, Description = "Kaufladen mit Zubehör", Price = 25, Quantity = 1 });
    20. basar.Organizer = organizer;
    21. basar.ResponsiblePerson = responsible;
    22. basar.EventName = "Kleiderbasar Musterhausen";
    23. basar.EventDate = DateTime.Now.AddDays(14);
    24. }


    Ach....Fehler gefunden.... es muss

    C#-Quellcode

    1. sellers.Find(s => s.SellerNumber == 1)
    heißen, bin ja bei C# :)
    "Hier könnte Ihre Werbung stehen..."
    Sieste, geht mit dem Model also besser als gedacht oder?
    Ich weis wie das ist, oft muss man es von jemand anderen Betrachten weil man sich einfach verläuft. Und hat man mal einen gewissen Blickpunkt kann man den nur schwer wieder verlassen.

    Es gibt bei meinem Model aber sicher auch noch ein paar verbesserungen, aber im groben denke ich das es soweit für dein Vorhaben passen sollte.

    PS: Wenn du den Seller per SellerNumber suchst muss sichergestellt sein das es diese nur 1x gibt. Ansonsten lieber über dessen ID.
    Sollte man es aber verhindern wollen das es diese mehrmals geben kann, kann man dies EF Core aber auch sagen .

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    jepp, sollte dann Uniqe sein.

    eine Sache ist mir doch noch gekommen bei der Seed 2 Methode.
    Wie sag ich dem Seller das er zu dem erstellten basar gehört?

    quasi hier:

    C#-Quellcode

    1. sellers.Add(new PersonModel(){ FirstName = "Maria", LastName = "Muster", SellerNumber = 1, });
    "Hier könnte Ihre Werbung stehen..."