Seminarverwaltung I: Entity Data Model

Es wird Zeit, die gelernten Techniken mal wieder an einer praktischen Lösung auszuprobieren. In diesem Fall soll es eine Anwendung werden, die ich selbst einsetzen will, da ich seit ein paar Wochen auch Webinare zu verschiedenen Themen anbiete. Die Herausforderung ist, die Kunden, die über einen Onlineshop bestellt haben, in die Anwendung einzulesen und diese den entsprechenden Seminaren beziehungsweise Webinaren zuzuordnen. Zu gegebener Zeit sollen die Teilnehmer eine Mail mit dem Link zur Teamssitzung erhalten und anschließend noch einen Link mit dem Download der Aufzeichnung des Seminars. Schließlich sollen auch noch Zertifikate über die Teilnahme erstellt und versendet werden. Wie dies alles gelingt, zeigt der vorliegende Artikel.

Projekt anlegen

Die Gestaltung einer Anwendung zum Verwalten von Daten startet mit dem Anlegen eines Projekts. Wir verwenden ein Projekt des Typs WPF-App (.NET Framework) mit der Sprache Visual Basic und auf Basis von XAML für die Gestaltung der Benutzeroberfläche.

Entity Data Model hinzufügen

Wir wollen die Daten in einer SQL Server-Datenbank speichern und über ein Entity Data Model auf diese Daten zugreifen. Dazu fügen wir dem Projekt ein Entity Data Model hinzu. Mit Strg + Umschalt + A öffnen wir den Dialog Neues Element hinzufügen und wählen dort den Eintrag ADO.NET Entity Data Model aus. Nach der Angabe des Namens SeminarverwaltungContext klicken wir auf die Schaltfläche Hinzufügen (siehe Bild 1).

Hinzufügen eines Entity Data Models

Bild 1: Hinzufügen eines Entity Data Models

Danach wählen Sie im Dialog Assistent für Entity Data Model den Eintrag Leeres Code First-Modell aus (siehe Bild 2).

Auswahl des Model-Typs

Bild 2: Auswahl des Model-Typs

Nach wenigen Sekunden erscheint die Klasse SeminarverwaltungContext, in der wir für jede zu erstellende Entität beziehungsweise Tabelle einen Eintrag hinzufügen. Hier finden wir auch eine Vorlage für eine Entitätsklasse.

Entitäten hinzufügen

Damit können wir beginnen, die gewünschten Entitäten hinzuzufügen. Dazu überlegen wir uns zunächst, welche Entitäten wir benötigen. Wir benötigen auf jeden Fall eine Entität für die Kunden und eine für die Seminare. Jedem Kunden soll jedes Seminar zugeordnet werden können und umgekehrt. Daher soll später in der Datenbank eine Verknüpfungstabelle erscheinen. Damit dies geschieht, benötigen wir keine eigene Entität für die Verknüpfungstabelle – die Beziehungstabelle erstellen wir dann über ein spezielles Mapping.

Die Kunden haben eine Anrede, die wir in einer eigenen Tabelle speichern und dann über ein Fremdschlüsselfeld zuweisen wollen, also legen wir auch eine entsprechende Entität für die Anreden an.

Außerdem benötigen wir zumindest eine Tabelle zur Verwaltung der Seminare. An dieser Stelle kann man sich gleich überlegen, ob es nur eine Tabelle zum Speichern der Seminare gibt. Dann muss man Seminare mit Themen, die nochmal wiederholt werden sollen, immer wieder komplett neu anlegen. Man könnte auch eine Tabelle mit Seminaren erstellen, welche die Basisinformationen eines Seminars enthält wie den Titel, die Inhaltsangabe, den Preis et cetera – beispielsweise namens Seminarthemen.

Und dann fügt man eine neue Tabelle beispielsweise namens Seminare hinzu, welche die Seminartermine enthält und das Datum mit dem Seminar verknüpft. Oder man macht es gleich wie beim Beispiel der Bestellpositionen in einer Bestellverwaltung, wo man die Details des Artikels wie Einzelpreis oder Steuersatz aus der Artikeltabelle übernimmt, damit diese auch nach Änderung von Preis oder Steuersatz in der Artikeltabelle in der Tabelle für Bestellpositionen enthalten bleiben. In diesem Fall würden wir dann die Felder Titel, Inhalt und Preis von der Tabelle Seminarthemen in die Tabelle Seminare übernehmen.

Schließlich benötigen noch die Verknüpfungstabelle zwischen den Tabellen Seminare und Kunden, die wir, wie oben beschrieben, allein über Mapping mit der Fluent API definieren. Diese Tabelle soll SeminareKunden heißen.

Die Entität Kunde

Für die Entität Kunde legen wir die üblichen Eigenschaften wie Vorname, Nachname, Adresse et cetera fest. Wichtig ist hier vor allem die E-Mail-Adresse. Schließlich definieren wir hier eine ICollection namens Seminare für die Elemente des Typs Seminar. Diese wird im Konstruktor der Entitätsklasse erstellt:

Public Class Kunde
     Public Overridable Property ID As Int32
     Public Overridable Property Vorname As String
     Public Overridable Property Nachname As String
     Public Overridable Property Firma As String
     Public Overridable Property Strasse As String
     Public Overridable Property PLZ As String
     Public Overridable Property Ort As String
     Public Overridable Property Land As String
     Public Overridable Property EMail As String
     Public Overridable Property UstIDNr As String
     Public Overridable Property Seminare As ICollection(Of Seminar)
End Class

Die Entität Seminar

Möchten Sie weiterlesen? Dann lösen Sie Ihr Ticket!
Hier geht es zur Bestellung des Jahresabonnements des Magazins DATENBANKENTWICKLER:
Zur Bestellung ...
Danach greifen Sie sofort auf alle rund 200 Artikel unseres Angebots zu - auch auf diesen hier!
Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:

Schreibe einen Kommentar