1 of 49

Bauen der Web-App

Kurzüberblick 02

Klassenbibliothek

Sushi für's Hirn

ICM@I3CM

Inverted Classroom Model im Institut für Ingenieurinformatik und computergestützte Mathematik (I3CM)

ICM@I3CM

Prof. Dr.-Ing. Jörn Schlingensiepen

2 of 49

Klassen-�bibliothek

Klassenbibliothek erstellen

Modell erstellen

Datenbank erstellen

Modell anpassen

ICM@I3CM

Prof. Dr.-Ing. Jörn Schlingensiepen

3 of 49

Klassenbibliothek erstellen

Danach wird in dieser Solution zunächst die Klassenbibliothek (Class Library) erzeugt. Diese beinhaltet später, das Datenmodell und allen Quellcode zur Datenverarbeitung, der nicht spezifisch für eine Benutzungsschnittstelle ist.

Desktop-Anwendungen, Web-Anwendungen und Anwendunge für mobile Geräte verwenden hier den gleichen Quellcode.

Achten Sie darauf, die korrekte Programmiersprache (C#) und das korrekte Profil (.NET Framework) auszuwählen.

ICM@I3CM

Prof. Dr.-Ing. Jörn Schlingensiepen

4 of 49

Klassenbibliothek erstellen

Danach wird in dieser Solution zunächst die Klassenbibliothek (Class Library) erzeugt. Diese beinhaltet später, das Datenmodell und allen Quellcode zur Datenverarbeitung, der nicht spezifisch für eine Benutzungsschnittstelle ist.

Desktop-Anwendungen, Web-Anwendungen und Anwendunge für mobile Geräte verwenden hier den gleichen Quellcode.

Achten Sie darauf, die korrekte Programmiersprache (C#) und das korrekte Profil (.NET Framework) auszuwählen.

ICM@I3CM

Prof. Dr.-Ing. Jörn Schlingensiepen

5 of 49

EntityFrameWork installieren

Der objektorientierte Zugriff auf die relationale Datenbank erfolgt über das EntityFrameWork.

Diese wird über den NuGet Package Manager installiert.

Beachten Sie, dass die Installation nur für das jeweilige Projekt erfolgt, d.h. für die Projekte, die später auch auf die Datenbankschicht zugreifen sollen, muss das Framework auch installiert werden.

ICM@I3CM

Prof. Dr.-Ing. Jörn Schlingensiepen

6 of 49

EntityFrameWork installieren

Der objektorientierte Zugriff auf die relationale Datenbank erfolgt über das EntityFrameWork.

Diese wird über den NuGet Package Manager installiert.

Beachten Sie, dass die Installation nur für das jeweilige Projekt erfolgt, d.h. für die Projekte, die später auch auf die Datenbankschicht zugreifen sollen, muss das Framework auch installiert werden.

Projekte

ICM@I3CM

Prof. Dr.-Ing. Jörn Schlingensiepen

7 of 49

EntityFrameWork installieren

Der objektorientierte Zugriff auf die relationale Datenbank erfolgt über das EntityFrameWork.

Diese wird über den NuGet Package Manager installiert.

Beachten Sie, dass die Installation nur für das jeweilige Projekt erfolgt, d.h. für die Projekte, die später auch auf die Datenbankschicht zugreifen sollen, muss das Framework auch installiert werden.

ICM@I3CM

Prof. Dr.-Ing. Jörn Schlingensiepen

8 of 49

EntityFrameWork installieren

Der objektorientierte Zugriff auf die relationale Datenbank erfolgt über das EntityFrameWork.

Diese wird über den NuGet Package Manager installiert.

Beachten Sie, dass die Installation nur für das jeweilige Projekt erfolgt, d.h. für die Projekte, die später auch auf die Datenbankschicht zugreifen sollen, muss das Framework auch installiert werden.

ICM@I3CM

Prof. Dr.-Ing. Jörn Schlingensiepen

9 of 49

EntityFrameWork installieren

Der objektorientierte Zugriff auf die relationale Datenbank erfolgt über das EntityFrameWork.

Diese wird über den NuGet Package Manager installiert.

Beachten Sie, dass die Installation nur für das jeweilige Projekt erfolgt, d.h. für die Projekte, die später auch auf die Datenbankschicht zugreifen sollen, muss das Framework auch installiert werden.

Referenz

Meldung

ICM@I3CM

Prof. Dr.-Ing. Jörn Schlingensiepen

10 of 49

Klassen-�bibliothek

Klassenbibliothek erstellen

Modell erstellen

Datenbank erstellen

Modell anpassen

ICM@I3CM

Prof. Dr.-Ing. Jörn Schlingensiepen

11 of 49

Neues Datenmodell

Als Datenmodell wird ein ADO.NET Entity Data Model zum Projekt hinzugefügt.

ICM@I3CM

Prof. Dr.-Ing. Jörn Schlingensiepen

12 of 49

Neues Datenmodell

Als Datenmodell wird ein ADO.NET Entity Data Model zum Projekt hinzugefügt.

ICM@I3CM

Prof. Dr.-Ing. Jörn Schlingensiepen

13 of 49

Neues Datenmodell

Das Datenmodell sollte zu Beginn leer sein.

ICM@I3CM

Prof. Dr.-Ing. Jörn Schlingensiepen

14 of 49

Neue Entität erstellen

Mittels der Funktion ‘Add New’ → ‘Entity…’ werden neue Entitäten erzeugt.

ICM@I3CM

Prof. Dr.-Ing. Jörn Schlingensiepen

15 of 49

Neue Entität erstellen

Mittels der Funktion ‘Add New’ → ‘Entity…’ werden neue Entitäten erzeugt.

Dabei sollte der Haken bei ‘Create key property’ gesetzt sein.

ICM@I3CM

Prof. Dr.-Ing. Jörn Schlingensiepen

16 of 49

Relationen erstellen

Mittels der Funktion ‘Add New’ → ‘Association…’ werden neue Relationen/Assoziationen erzeugt.

Aktivieren Sie dazu den Haken bei:

“Add foreign key properties to the ‘...’ Entity”

ICM@I3CM

Prof. Dr.-Ing. Jörn Schlingensiepen

17 of 49

Relationen erstellen

Mittels der Funktion ‘Add New’ → ‘Association…’ werden neue Relationen/Assoziationen erzeugt.

Aktivieren Sie dazu den Haken bei:

“Add foreign key properties to the ‘...’ Entity”

ICM@I3CM

Prof. Dr.-Ing. Jörn Schlingensiepen

18 of 49

Klassen-�bibliothek

Klassenbibliothek erstellen

Modell erstellen

Datenbank erstellen

Modell anpassen

ICM@I3CM

Prof. Dr.-Ing. Jörn Schlingensiepen

19 of 49

Datenbank erstellen

Aus dem Datenmodell werden sowohl die C#-Klassen, als auch die Struktur der Datenbank erstellt.

Visual Studio legt für beides Verknüpfungen an, wenn die Datenbank das erste mal erstellt wird.

ICM@I3CM

Prof. Dr.-Ing. Jörn Schlingensiepen

20 of 49

Datenbank erstellen

Aus dem Datenmodell werden sowohl die C#-Klassen, als auch die Struktur der Datenbank erstellt.

Visual Studio legt für beides Verknüpfungen an, wenn die Datenbank das erste mal erstellt wird.

Visual Studio verwaltet dazu verschiedene Verknüpfungen zu Datenbanken. Hier erstellen Sie über die Schaltfläche ‘New Connection…’ eine neue Verknüpfung.

ICM@I3CM

Prof. Dr.-Ing. Jörn Schlingensiepen

21 of 49

Datenbankverknüpfung

Eine Datenbankverknüpfung besteht aus mehreren Teilen:

Die Art der Datenbank, in unserem Falle ein Microsoft SQL Server (Das ADO.NET und das EntityFrameWork unterstützen verschiedene Datenbanken, da sich die Schnittstellen und die verwendeten SQL-Dialekte leicht unterscheiden benötigt man diese Angabe zur Verbindung mit der Datenbank.)

Datenbanktyp

ICM@I3CM

Prof. Dr.-Ing. Jörn Schlingensiepen

22 of 49

Datenbankverknüpfung

Eine Datenbankverknüpfung besteht aus mehreren Teilen:

Eine Angabe, wo die Datenbank ausgeführt wird, bestehend aus dem Namen des Hosts (das ist der Rechner auf dem der Datenbankserver läuft) und dem Namen der Instanz der Datenbankserver (Es können nämlich mehrere Datenbankserver auf einem Rechner laufen.)

Hier verwenden Sie als Hostnamen ‘.’ für den lokalen Rechner (localhost) und ‘SQLEXPRESS’ für den Namen der Instanz. (Es sei denn, sie haben diesen bei der Installation geändert.)

Datenbankserver

ICM@I3CM

Prof. Dr.-Ing. Jörn Schlingensiepen

23 of 49

Datenbankverknüpfung

Eine Datenbankverknüpfung besteht aus mehreren Teilen:

Eine Angabe dazu, wie beim Zugriff auf die Datenbank die Authentifizierung durchgeführt werden soll. Hier wählen Sie ‘Windows Authentication’.

Authentifizierung

Zur Laufzeit wird die Web-Anwendung vom Web-Server ausgeführt, d.h. es gibt nur einen Prozess für alle Anwender, der unter einem allgemeinen Benutzerkonto ausgeführt wird. Zugriffsrechte auf Geschäftsobjekte müssen daher in der Web-Anwendung implementiert werden.

ICM@I3CM

Prof. Dr.-Ing. Jörn Schlingensiepen

24 of 49

Datenbankverknüpfung

Eine Datenbankverknüpfung besteht aus mehreren Teilen:

Dem Namen der Datenbank: Eine Datenbankserver kann in der Regel mehrer Datenbanken bereitstellen, um diese zu unterscheiden, haben diese eindeutige Namen.

In dem Feld ist eine Drop-Down-Liste der vorhandenen Datenbanken hinterlegt.

Datenbankname

ICM@I3CM

Prof. Dr.-Ing. Jörn Schlingensiepen

25 of 49

Datenbankverknüpfung

Eine Datenbankverknüpfung besteht aus mehreren Teilen:

Dem Namen der Datenbank: Eine Datenbankserver kann in der Regel mehrer Datenbanken bereitstellen, um diese zu unterscheiden, haben diese eindeutige Namen.

In dem Feld ist eine Drop-Down-Liste der vorhandenen Datenbanken hinterlegt. Sie können dort auch einfach einen neuen Namen angeben. Der Datenbankadapter erstellt diese Datenbank dann.

Datenbankname

ICM@I3CM

Prof. Dr.-Ing. Jörn Schlingensiepen

26 of 49

Datenbankverknüpfung abspeichern

Die Anwendung benötigt zur Laufzeit alle Informationen zum Zugriff auf die Datenbank. Daher gibt es zum Abspeichern einer kompletten Datenbankverbindung ein Format um diese in einer Zeichenkette abzulegen. Diese kann von der Anwendung dann aus einer Konfigurationsdatei ausgelesen werden.

Haken Sie die Option ‘Save connection settings in App.Config as:’ an, um diese Zeichenkette als sog. Connection string abzuspeichern.

Connection String

Option

ICM@I3CM

Prof. Dr.-Ing. Jörn Schlingensiepen

27 of 49

Datenbankverknüpfung abspeichern

Die Anwendung benötigt zur Laufzeit alle Informationen zum Zugriff auf die Datenbank. Daher gibt es zum Abspeichern einer kompletten Datenbankverbindung ein Format um diese in einer Zeichenkette abzulegen. Diese kann von der Anwendung dann aus einer Konfigurationsdatei ausgelesen werden.

Haken Sie die Option ‘Save connection settings in App.Config as:’ an, um diese Zeichenkette als sog. Connection string abzuspeichern.

Connection String

Option

ICM@I3CM

Prof. Dr.-Ing. Jörn Schlingensiepen

28 of 49

Datenbankverknüpfung abspeichern

Die Anwendung benötigt zur Laufzeit alle Informationen zum Zugriff auf die Datenbank. Daher gibt es zum Abspeichern einer kompletten Datenbankverbindung ein Format um diese in einer Zeichenkette abzulegen. Diese kann von der Anwendung dann aus einer Konfigurationsdatei ausgelesen werden.

Haken Sie die Option ‘Save connection settings in App.Config as:’ an, um diese Zeichenkette als sog. Connection string abzuspeichern.

App.config

Connection string

ICM@I3CM

Prof. Dr.-Ing. Jörn Schlingensiepen

29 of 49

Datenbank erstellen

Zur Erstellung der Datenbank wird SQL-Code erzeugt, der dann auf dem Datenbankserver ausgeführt werden muss um die entsprechenden Tabellen in der Datenbank anzulegen.

ICM@I3CM

Prof. Dr.-Ing. Jörn Schlingensiepen

30 of 49

Datenbank erstellen

Zur Erstellung der Datenbank wird SQL-Code erzeugt, der dann auf dem Datenbankserver ausgeführt werden muss um die entsprechenden Tabellen in der Datenbank anzulegen.

ICM@I3CM

Prof. Dr.-Ing. Jörn Schlingensiepen

31 of 49

Datenbank erstellen

Zur Erstellung der Datenbank wird SQL-Code erzeugt, der dann auf dem Datenbankserver ausgeführt werden muss um die entsprechenden Tabellen in der Datenbank anzulegen.

Dieser SQL-Code landet in einer Textdatei, die unterhalb des Modells in das Projekt eingehängt wird.

SQL-Datei

ICM@I3CM

Prof. Dr.-Ing. Jörn Schlingensiepen

32 of 49

Datenbank erstellen

Zur Erstellung der Datenbank wird SQL-Code erzeugt, der dann auf dem Datenbankserver ausgeführt werden muss um die entsprechenden Tabellen in der Datenbank anzulegen.

Dieser SQL-Code landet in einer Textdatei, die unterhalb des Modells in das Projekt eingehängt wird.

SQL-Datei

ICM@I3CM

Prof. Dr.-Ing. Jörn Schlingensiepen

33 of 49

Datenbank erstellen

Zum Ausführen des Codes wird im SQL-Fenster eine Verbindung zur Datenbank erstellt.

Connect

ICM@I3CM

Prof. Dr.-Ing. Jörn Schlingensiepen

34 of 49

Datenbank erstellen

Zum Ausführen des Codes wird im SQL-Fenster eine Verbindung zur Datenbank erstellt.

Datenbankserver

Name der Datenbank

ICM@I3CM

Prof. Dr.-Ing. Jörn Schlingensiepen

35 of 49

Datenbank erstellen

Zum Ausführen des Codes wird im SQL-Fenster eine Verbindung zur Datenbank erstellt.

Anschließend wird die Datenbank ausgewählt und der SQL-Code exekutiert.

Datenbank

ICM@I3CM

Prof. Dr.-Ing. Jörn Schlingensiepen

36 of 49

Datenbank erstellen

Zum Ausführen des Codes wird im SQL-Fenster eine Verbindung zur Datenbank erstellt.

Anschließend wird die Datenbank ausgewählt und der SQL-Code exekutiert.

Ausführen

ICM@I3CM

Prof. Dr.-Ing. Jörn Schlingensiepen

37 of 49

Datenbank erstellen

Zum Ausführen des Codes wird im SQL-Fenster eine Verbindung zur Datenbank erstellt.

Anschließend wird die Datenbank ausgewählt und der SQL-Code exekutiert.

Meldung

ICM@I3CM

Prof. Dr.-Ing. Jörn Schlingensiepen

38 of 49

SQL-Management-Studio

Mit dem SQL-Management-Studio können Sie auf den Datenbankserver zugreifen und sich die Struktur der Datenbank anzeigen lassen.

Dies können Sie nutzen um zu prüfen ob die Datenbank korrekt angelegt wurde.

ICM@I3CM

Prof. Dr.-Ing. Jörn Schlingensiepen

39 of 49

Codegeneratoren

Zusätzlich zum SQL-Code hängt die Funktion “Generate Datebase” auch zwei Codegeneratoren in das Projekt ein.

Einen zum Generieren des modell- spezifischen Datenbankadapters und einen zweiten zum Generieren der eigentlichen Klassen.

Adaptergenerator

ICM@I3CM

Prof. Dr.-Ing. Jörn Schlingensiepen

40 of 49

Codegeneratoren

Zusätzlich zum SQL-Code hängt die Funktion “Generate Datebase” auch zwei Codegeneratoren in das Projekt ein.

Einen zum Generieren des modell- spezifischen Datenbankadapters und einen zweiten zum Generieren der eigentlichen Klassen.

Klassengenerator

ICM@I3CM

Prof. Dr.-Ing. Jörn Schlingensiepen

41 of 49

Codegeneratoren

Zusätzlich zum SQL-Code hängt die Funktion “Generate Datebase” auch zwei Codegeneratoren in das Projekt ein.

Einen zum Generieren des modell- spezifischen Datenbankadapters und einen zweiten zum Generieren der eigentlichen Klassen.

Datenbankadapter

ICM@I3CM

Prof. Dr.-Ing. Jörn Schlingensiepen

42 of 49

Codegeneratoren

Zusätzlich zum SQL-Code hängt die Funktion “Generate Datebase” auch zwei Codegeneratoren in das Projekt ein.

Einen zum Generieren des modell- spezifischen Datenbankadapters und einen zweiten zum Generieren der eigentlichen Klassen.

Nach Änderungen am Modell muss das Modell abgespeichert werden (Strg+s) um eine Neuerstellung der Klassen zu veranlassen.

Klassen

ICM@I3CM

Prof. Dr.-Ing. Jörn Schlingensiepen

43 of 49

Datenbankadapter

Der Datenbankadapter ist modellspezifisch, d.h. er enthält für jeden Datentypen ein eigenes DbSet-Attribut. Über dieses Attribut können die Daten dann per LINQ aus der Datenbank abgefragt werden.

Außerdem enthält der generierte Adapter einen Aufruf des Konstruktor der Superklasse DBContext mit dem der Name Adapters angelegt wird. Über diesen Namen wählt der Datenbankadapter den passenden Connection String aus der Konfigurations- datei.

DBSets

Name

ICM@I3CM

Prof. Dr.-Ing. Jörn Schlingensiepen

44 of 49

Klassen-�bibliothek

Klassenbibliothek erstellen

Modell erstellen

Datenbank erstellen

Modell anpassen

ICM@I3CM

Prof. Dr.-Ing. Jörn Schlingensiepen

45 of 49

Vorbemerkung

Das Mapping auf diese IDs geschieht implizit. Der Zugriff auf die einzelnen Objekte über die Web-Oberfläche erfolgt anhand der Id.

Damit diese im Datenmodell zugreifbar wird, muss das Mapping der IDs ‘explizit’ gemacht werden.

Die folgenden Schritte sind nur notwendig, wenn Sie die Relation nicht über den Dialog erstellt haben und die IDs daher fehlen.

ICM@I3CM

Prof. Dr.-Ing. Jörn Schlingensiepen

46 of 49

Vorbereitung

Bei der Erstellung der Datenbank aus dem Modell, wir das sog. Mapping, also die Abbildung der einzelnen Attribute der Entitäten auf die Spalten in der Datenbank, gespeichert.

Sollten bei Änderunge am Modell Fehlermeldungen auftreten können diese gelöscht werden.

Sie finden die Verweise auf die Tabellen im Modellbrowser unter dem Eintrag .Store → Tables/Views. Die Einträge können mit ‘Entf’ gelöscht werden.

ICM@I3CM

Prof. Dr.-Ing. Jörn Schlingensiepen

47 of 49

Sichtbarmachen der einzelnen ID

Fügen Sie auf der Seite mit dem ‘n’-Ende ein zusätzliches Attribute mit dem Namen <RollenName>ID vom Type Int32 ein.

Ist die gegenüberliegende Multiplizität 0..1, dann setzen Sie Nullable auf true, dann ist es erlaubt eine oder keine Zahl in dem Feld abzulegen.

Ist die Gegenüberliegende Multiplizität 1, dann muss immer eine Zahl abgelegt werden, der Wert für Nullable ist also false.

Dieser Schritt ist nur notwendig, wenn Sie die Relation nicht über den Dialog erstellt haben und die IDs daher fehlt.

ICM@I3CM

Prof. Dr.-Ing. Jörn Schlingensiepen

48 of 49

Relation explizit definieren

Wählen Sie die Relation aus. Unter Contraints finden Sie den Eintrag ‘Referencial Contraint’, hier stellen Sie als Principal den Type am 1-Ende der Relation an und als Principal Key dessen ID und als Dependent den Typ mit am n-Ende der Relation und als Depentend Property das gerade erstellt Attribut.

Dieser Schritt ist nur notwendig, wenn Sie die Relation nicht über den Dialog erstellt haben und die IDs daher fehlt.

ICM@I3CM

Prof. Dr.-Ing. Jörn Schlingensiepen

49 of 49

Prof. Dr.-Ing. Jörn Schlingensiepen

https://lehre.schlingensiepen.com

Cliparts aus der Open Clip Art Library

Sushi für's Hirn

ICM@I3CM

Inverted Classroom Model im Institut für Ingenieurinformatik und computergestützte Mathematik (I3CM)

ICM@I3CM

Prof. Dr.-Ing. Jörn Schlingensiepen