Lies in den Artikel rein und unten bekommst Du ein unschlagbares Angebot!
In den bisherigen Ausgaben haben wir immer mit dem Database First-Ansatz gearbeitet, das heißt, dass wir unser Entity Data Model auf Basis einer bestehenden Datenbank im SQL Server oder SQLite generiert haben. Das geht auch andersherum: Sie erstellen ein paar Klassen, geben eine Verbindungszeichenfolge an und beim ersten Versuch, auf die Daten der Datenbank zuzugreifen, erstellt die Anwendung automatisch die Datenbank im angegebenen SQL Server. Wie das gelingt und wie die Klassen und die Verbindungszeichenfolge aussehen müssen, erfahren Sie in diesem Beitrag.
Als Beispiel wählen wir unsere Anwendung zum Erstellen von Anschreiben mit Word von einem WPF-Fenster aus. Dieser haben wir im ersten Schritt ja nur einfache Textfelder als Eingabemöglichkeit hinzugefügt, in die der Benutzer Anschrift, Datum, Betreff und Inhalt des Anschreibens eintragen kann, bevor daraus ein Word-Dokument auf Basis der gewählten Vorlage erstellt wird. Nun wollen wir dies erweitern – und zwar um die Möglichkeit, sowohl verschiedene Anschriften zu verwalten als auch um die Anschreiben abzuspeichern, um diese gegebenenfalls später noch einmal aufzurufen oder auch als Vorlage für neue Anschreiben zu verwenden.
Unter Access würden wir das Formular einfach an eine Tabelle zum Speichern der Daten des Anschreibens binden und gegebenenfalls noch eine Tabelle für die verschiedenen Anschriften hinzufügen. Allerdings wollen wir ja in diesem Magazin lernen, mit den unter WPF gängigen Techniken umzugehen – wie etwa dem Entity Data Model als Möglichkeit, Daten zwischen Benutzeroberfläche und Datenbank hin- und herzuschieben.
In den vorherigen Ausgaben haben wir meist eine vorhandene Datenbank genutzt und mit dem dafür vorgesehenen Assistenten ein Entity Data Model erstellen lassen. Dieses enthält die Klassen und Auflistungen, mit denen wir dann von der Benutzeroberfläche beziehungsweise von der Anwendungslogik aus auf die Daten der Datenbank zugreifen konnten. In diesem Beispiel wollen wir es einmal andersherum versuchen: Wir wollen zuerst die Klassen für die beiden Entitäten programmieren, also für die Anschreiben und die Adressen, und daraus dann ein Datenmodell generieren. Auch dieser Fall ist vom Entity Framework als Möglichkeit vorgesehen und nennt sich Code First. Wir erstellen also erst den Code und lassen daraus dann die Datenbank erzeugen. Das wir für das erste Beispiel eine relativ einfache Konstellation mit nur zwei Entitäten nutzen (okay, mit Anreden für die Adressen vielleicht drei), wird die Komplexität ein wenig vermindern.
Vorbereitungen
Als Erstes erstellen wir ein neues, leeres Projekt namens CodeFirst – und zwar mit der Vorlage Visual Basic|Windows|WPF-Anwendung oder Visual C#|Windows|WPF-Anwendung. Diesem Projekt fügen Sie nach Markierung des Eintrags mit dem Projektnamen CodeFirst im Projektmappen-Explorer ein Element des Typs ADO.NET Entity Data Model hinzu. Den dazu nötigen Dialog Neues Element hinzufügen… öffnen Sie mit der Tastenkombination Strg + Umschalt + A. Hier wählen Sie den passenden Elementtyp aus und legen als Name den Wert Wordgenerator fest (siehe Bild 1).
Bild 1: Entity Data Model zum Projekt hinzufügen
Im folgenden Assistent für Entity Data Model wählen Sie den Eintrag Leeres Code First-Modell aus (siehe Bild 2). Im Gegensatz zu der Variante, die wir sonst gewählt haben, nämlich EF Designer aus Datenbank, ist dies gleichzeitig schon der letzte Schritt in diesem Assistenten, den wir mit einem Klick auf die Schaltfläche Fertigstellen beenden.
Bild 2: Modelltyp Leeres Code First-Modell auswählen
Diesmal geschieht auch gar nicht viel in unserem Projekt. Die augenscheinlichste Änderung ist, dass der Assistent ein Klassenmodul namens Wordgenerator.vb (beziehungsweise Wordgenerator.cs unter C#) angelegt hat (siehe Bild 3). Die Klasse Wordgenerator erbt von der Klasse DbContext.
Bild 3: Durch den Assistenten angelegte Klasse
Modell programmieren