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.

    Nofear23m schrieb:

    Aber..... der MySQL Server von deinem Hoster wird von aussen nicht erreichbar sein.


    Kann man das hier nicht einstellen?



    ODer muss ich dann wieder extra umwege gehen?
    Rechtschreibfehler betonen den künstlerischen Charakter des Autors.
    @Akanel ich glaub das reicht nicht. Das bezieht sich glaub nur auf das Netzwerk (deines Providers) selbst und sagt nicht das Überall auch von aussen heißt. Ich habs auf meiner MySQL auch eingestellt, komme trotzdem nicht von extern drauf.

    @Nofear23m
    ich hab mir jetzt nochml einige Gedanken gemacht. Mit Asp.net und MVC hab ich sogar mal was gemacht, vor rund 2 Jahren, da kann ich nochmal schauen wie ich das damals umgesetzt habe, vergesse solch leider immer schnell...
    Im Grunde habe ich am Anfang 4 Anwendungen, die ich vermutlich wie folgt aufbauen würde:
    Bazaar.LogInDataCreator - WPF Anwendung mit Zugriff auf die PersonModel und LogInDataModel um die Organizer zu erstellen und Lizenz zuweisen
    Bazaar.SellerApplication - ASP.Net Core MVC Anwendung mit EF damit die Verkäufer ihre Artikel verwalten können
    Bazaar.MainApplication - WPF Anwendung Hauptanwendung für den Organizer/Responsible um die Daten zu vervollständigen, die Seller anlegen, die Kasse einzurichten.
    Bazaar.CashRegister - WPF Anwendung mit lokaler XML um die Artikel zu verkaufen.

    was ich vermutlich über Webservice abbilden würde, wäre die User Anmedlung, prüfen der Lizenz und Prüfen wieviel Seller erstellt werden dürfen.
    hab versucht mich in Webservice einzulesen, hab aber nicht alles verstanden.
    "Hier könnte Ihre Werbung stehen..."

    Akanel schrieb:

    Kann man das hier nicht einstellen?

    Oh, na vieleicht lässt der Provider eine direkte Verbindung von aussen sogar zu. Kannst ja mal einstellen und versuchen mit Visual Studio darauf zuzugreifen.
    Geht mit VS mit dem SQL Server-Object Explorer. Musst sehen ob du die SQL DataTools im Installer angewählt hast.

    MichaHo schrieb:

    Im Grunde habe ich am Anfang 4 Anwendungen

    Ganz wie du willst. Du kannst aber auch die drei WPF Anwendungen zusammenlagen und je nach Login die MenuItems aus/ein-blenden. So muss nur eine Anwendung gewartet und ausgerollt werden.

    MichaHo schrieb:

    hab versucht mich in Webservice einzulesen, hab aber nicht alles verstanden

    Ist simpel. Mit ein paar Zeilen Code ist das Webservice aufgesetzt, dann nur noch die Login und gut.

    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 Sascha,
    die Bazaar.LogInDataCreator ist ja nur für mich selbst, könnte die Zugangsdaten auch direkt in der DB eintragen, aber um bei WPF auf dem laufenden zu bleiben dachte ich, lieber ne App dazu.

    die Bazaar.CashRegister soll ja unter Umständen auf mehreren Notebooks am Tag der Veranstaltung laufen und nur Offline funktionieren mit XML Datei.

    Das Hauptprogramm für den Veranstalter wird das Bazaar.MainApplication sein, dazu wird Internet benötigt.
    Also zusammenlegen wäre da schlecht.
    "Hier könnte Ihre Werbung stehen..."
    Ganz wie es dir beliebt.

    Setze mal die Projektmappe iin dieser Struktur auf und dann sehen wir weiter.
    PS: Denke daran das sich gewisse Projekte gewisse Teile teilen können müssen. z.b. müssen mehrere Projekte auf das Model zugreifen können, sollte also ein eigene Projekt sein.

    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 Sascha,
    ja klar, wie bei MVVM halt.
    Heute Nachmittag kommt unsere Bekannte, für die ich das WinForms Bazaar geschrieben hab, sie hat paar ideen... uff...
    wobei meine Frau schon sagte wofür ein Programm installieren, wenn auch eine WebApp dafür herhalten könnte, also ASP.Net Core mit MVC, oder was ist WPF WebApp?
    hat sie eigentlich nicht ganz unrecht, dann könnte ich wirklich bis auf die Kasse alles in einer Application abhandeln...
    Und hätte zusätzlich den Vorteil das keine Logik lokal auf dem Rechner liegt, die man aushebeln könnte, oder?
    Außerdem wurde ich dazu verdonnert, an dem HomeStorage weiter zu machen...uff... bekomme das nach jedem Einkauf aufs Brot geschmiert -:) Frauen halt, sind halt die waren Chefs zu Hause...
    "Hier könnte Ihre Werbung stehen..."

    MichaHo schrieb:

    Und hätte zusätzlich den Vorteil das keine Logik lokal auf dem Rechner liegt, die man aushebeln könnte, oder?

    Ich dachte du hättest irgendwann geschrieben das vor Ort nicht immer eine Internetverbindung verfügbar ist und du das deshalb so machen willst.
    Bin mir aber jetzt nicht mehr sicher.

    Sicher, dann wäre new MVC Seite sicher besser. Im ResponsiveDesign hald damits auch mim Händy geht.

    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. ##

    Vor Ort wird eigentlich nur die Kasse benötigt, und die muss ohne Internet funktionieren.
    Die Einrichtung der Veranstaltung, die Erstellung der Verkäufer und das die Verkäufer ihre Artikel eintragen geht ja alles vorher und sollte dann mit bestehender Internet Verbindung gemacht werden müssen.

    Kannst Du mir kurz noch sagen was eine WPF Webanwendung ist?
    "Hier könnte Ihre Werbung stehen..."
    Die sind ausgestorben und wurden glaube ich nur richtig vom InternetExplorer unterstützt bzw. brauchte man bei anderen Browsern das Silverlight Plugin glaube ich.
    Sind aber glaube ich schon länge obsolet. Am Handy gingen die alle nicht.

    Achso, ok. Ja, dann brauchste mindestens eine Desktop-Anwendung.
    Ja, ich würde erstmal wirklich einen Plan machen wie, was, wann und wo. Abhängig von dem forderungen der Bekannten.

    In solch einem Fall würde ich aber wirklich so viel wie möglich übers Web abhandeln. Ist einfacher.
    Die Kasse muss ich im Grunde aber auch eine Importfunktion für die Artikel haben, die kommen hald von der API, dafür muss man hald Internet haben, zum Kassieren dann nicht mehr.

    Wie gesagt, bei solch einer Konstellation würde ich wirklich ein Lastenheft empfehlen. Einfach damit du dir mal wirklich im klaren bist was du wirklich benötigst.

    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. ##

    Danke für die Infos. Also 1 mal ASP.Net Core mit MVC, 1 mal ASP.Net Core Api und 1 mal WPF für die Kasse.
    mit der Kasse hatte ich mir so vorgestellt, das in der WebApp entsprechende Anzahl Kassen erstellt wird, dazu werden dann halt die XML erstellt und neben die .exe gespeichert. Oder einfach eine xml erstellen und in der Doku beschreiben wo die hin muss, geht auch (läuft jetzt schon genauso).

    Ja, Lastenheft hab ich angefangen, aber hab noch keine endgültige Version, die erstelle ich wenn ich die Heutigen „Ideen“ gehört habe.

    Danke Dir, werde mich alsbald wieder melden.
    "Hier könnte Ihre Werbung stehen..."

    MichaHo schrieb:

    Oder einfach eine xml erstellen und in der Doku beschreiben wo die hin muss, geht auch (läuft jetzt schon genauso).

    NE Importfunktion einzubauen ist ja kein problem. Muss man nix beschreiben. Geht ja beides. Import über Web wenn Internet vorhanden oder als "Fallback" über XML Files auf z.b. einem Stick oder sowas.

    Genau, schreib dir alles zusammen, schreib auf was MUSS es können und WIE, und was wäre ein nettes Feature muss aber nicht sein. Wichtig ist auch was es vieleicht später mal können soll, damit dies evtl. im Kern berücksichtigt werden kann. Nicht das man dann das halbe Programm umschreiben muss nur weil ein Feature rein muss.

    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 Sascha,

    ich hab das Projekt noch einmal komplett neu aufgesetzt, ich hatte schon wieder soviel darin rumm gefummelt das ich nicht mehr zurecht kam und dauernd Fehler hatte.

    Im Moment gibt es lediglich die Models, den DbContext (zeigt im Moment auf LocalDB) und 2 View Projekte also 1 Console, und 1 ASP.Net Core MVC
    Den DBContext habe ich erstellt, und die erste Migration angeschmißen.
    Dabei ist mir eins aufgefallen:
    Aus der ModelSnapshot im Migrations Ordner

    C#-Quellcode

    1. modelBuilder.Entity("de.mhoapps.BazaarManagement.Model.Article", b =>
    2. {
    3. b.Property<int>("ID")
    4. .ValueGeneratedOnAdd()
    5. .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
    6. b.Property<int>("ArticleNumber")
    7. .ValueGeneratedOnAddOrUpdate();


    Die Annotation bei der Artikelnummer ist richtig erkannt worden, das find ich Klasse. Nun ist es aber ja so, das die Artikelnummer sich aus der Verkäufernummer (SellerNumber) und eigentlich aus der ID des Artikels zusammensetzen soll.
    Kann ich das irgendwie im Modelsnapshot noch einbauen?

    EDIT:
    Leider schmeißt mir das Erstellen der DB auch einen Fehler im BazaarEvent Modell:

    XML-Quellcode

    1. Failed executing DbCommand (1,457ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
    2. CREATE TABLE [Events] (
    3. [ID] int NOT NULL IDENTITY,
    4. [CreatedBy] nvarchar(max) NULL,
    5. [CreationDate] datetime2 NOT NULL,
    6. [EventName] nvarchar(max) NOT NULL,
    7. [EventDate] datetime2 NOT NULL,
    8. [Provision] float NOT NULL,
    9. [MinProvision] decimal(18,2) NOT NULL,
    10. [OrganizerID] int NOT NULL,
    11. [ResponsiblePersonID] int NOT NULL,
    12. CONSTRAINT [PK_Events] PRIMARY KEY ([ID]),
    13. CONSTRAINT [FK_Events_Persons_OrganizerID] FOREIGN KEY ([OrganizerID]) REFERENCES [Persons] ([ID]) ON DELETE CASCADE,
    14. CONSTRAINT [FK_Events_Persons_ResponsiblePersonID] FOREIGN KEY ([ResponsiblePersonID]) REFERENCES [Persons] ([ID]) ON DELETE CASCADE
    15. );
    16. System.Data.SqlClient.SqlException (0x80131904): Introducing FOREIGN KEY constraint 'FK_Events_Persons_ResponsiblePersonID' on table 'Events' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.

    "Hier könnte Ihre Werbung stehen..."

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

    Hallo,

    Probelm ist behoben. Ist eigentlich auch logisch, EF Core hat den Fremdschlüßel auf DeleteBehavior.Cascade das ist beim Organizer ja ok, aber nicht beim Responsible.
    Wenn ein Responsible gelsöcht wird, soll nichts weiter gelöscht werden. Wenn ein Organizer gelöscht wird, sollen alle Events, Seller und deren Artikel mit gelöscht werden.
    Ich hab dies in den Migrations abgeändert und dann den Datenbank Befehl noch einmal abgeschickt.
    "Hier könnte Ihre Werbung stehen..."
    Hallo

    Na das scheint ja zu funktionieren. Gut gemacht.

    MichaHo schrieb:

    Den DBContext habe ich erstellt, und die erste Migration angeschmißen.

    Ein kleiner Tipp von mir. Während der Entwicklung empfielt es sich ohne der Migration zu Arbeiten bzw. erst gegen Ende da sich einfach zu oft noch was ändern wird.
    Ich mach das immer so das ich in diesem Fall einfach die DB neu erstellen lasse. EnsureCreated
    Bedeutet - ich lösche die DB und beim nächsten Debuggen erstellt er sie mir neu und eine Seed Methode welche die DB mit Beispieldaten füllt wird erstellt.
    So kannst du auch immer mit einer "frischen" DB mit den Beispieldaten testen.

    Ist aber nur eine Empfehlung, bleibt dir selbst überlassen, da will ich dir nicht reinpfuschen.

    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. ##

    Ok, DAS hab ich jetzt nicht verstanden.
    Ich muss doch über die NuGet Console das update-database anschneissen damit die DB erstellt wird. Oder wo erstellst du die DB?
    Die Seed hab ich schon im Consolen Projekt, das funzt super.
    "Hier könnte Ihre Werbung stehen..."
    Irgendwo - wo du willst - am Context einfach Database.EnsureCreated aufrufen.

    Danach noch das Seeding und alles ist in Ordnung. Muss man nicht pber die Console machen. Am Zielsystem beim Kunden hast du ja auch keine Console. Dort muss die DB ja auch automatisch angelegt werden.

    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. ##

    Ich möchte mich hier noch einmal einklinken.
    Was genau ist mit localDB gemeint? Also um was für eine Datenbank handelt es sich und was brauche ich um so eine localDB nutzen zu können. Dies scheint zum üben genau das richtige für mich zu sein wenn man immer wieder eine neue Datenbank erstellen kann und nicht benötigte löscht.
    Rechtschreibfehler betonen den künstlerischen Charakter des Autors.
    @Akanel

    Guck mal hier: docs.microsoft.com/en-us/sql/d…aldb?view=sql-server-2017
    Und hier ein GetStartet mit EF Core und localDB: docs.microsoft.com/en-us/ef/co…tarted/full-dotnet/new-db

    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. ##