Code First Mapping per Fluent API

Lies in den Artikel rein und unten bekommst Du ein unschlagbares Angebot!

Wenn Sie ein Code First-Entity Data Model entwerfen, gibt es bestimmte Konventionen, die standardmäßig greifen. So heißen Entitäten wie der Singular der zugrunde liegenden Tabellennamen oder der Primär- und Fremdschlüssel werden aus Feldern abgeleitet, welche die Zeichenkette ID enthalten – gegebenenfalls kombiniert mit dem Entitätsnamen. Wenn Sie mit einem Datenmodell daherkommen, dessen Tabellen das Präfix “tbl” mitbringen, wollen Sie dieses nicht in den Entitätsnamen wiederfinden und gegebenenfalls möchten (oder müssen) Sie auch noch Feldnamen ändern und diese anschließend mappen. Eine Möglichkeit dazu finden Sie in den Methoden der Fluent Api, die wir in diesem Artikel beschreiben.

Warum Mapping zwischen Datenmodell und Entitäten

Wenn Sie ein Entity Data Model auf Basis des Datenmodells einer Datenbank erstellen oder andersherum, ist immer eine bestimmte Art von Mapping erforderlich. Im Optimalfall sind die Tabellen- und Feldnamen genau so eingestellt, dass diese den DbSet- und Entitätsnamen entsprechen.

Sobald Sie aber ein Datenmodell erhalten, das beispielsweise Tabellennamen mit dem Präfix tbl (wie tblArtikel) enthält und wo die Feldnamen vielleicht nicht den Wünschen des Entwicklers für die Eigenschaften der Entitäten entsprechen, müssen Sie diese auf irgendeine Weise anpassen. Das Datenmodell anzupassen wäre toll, aber in manchen Fällen greifen noch andere Anwendungen auf die Datenbank zu, sodass Sie die Namen von Tabellen und Feldern nicht einfach ändern können.

Also stellt das Entity Framework Möglichkeiten bereit, das Mapping zwischen den Tabellen und Feldern auf der einen und den DbSets und Eigenschaften auf der anderen Seite anzupassen.

Dabei kann das Mapping für verschiedene Zwecke genutzt werden:

  • Wenn Sie ein Entity Data Model auf Basis einer bestehenden Datenbank etwa vom SQL Server für Code First erstellt haben und die Auflistungen, Entitätsklassen und ihre Eigenschaften so anpassen wollen, dass es Ihren Programmierkonventionen entspricht, auch wenn die Definition der Tabellen und Felder anders lautet oder
  • wenn Sie ein Entity Data Model als Code First-Model programmiert haben und dann per Migration-Funktionalität daraus die Datenbank erzeugen wollen. Wie dies gelingt, schauen wir uns an einigen Beispielen in den folgenden Abschnitten im Detail an.

Mapping mit der Fluent API

Die Fluent API des Entity Frameworks bietet Methoden, die genau an einer Stelle innerhalb des Entity Data Models ausgeführt werden: in der Überschreibung der Methode OnModelCreating der DbContext-Klasse. Entity Framework ruft diese Methode beim Erstellen des Entity Data Models auf und führt die dort angegebenen Anweisungen zum Anpassen des Mappings aus.

Beispielprojekt

Das Beispielprojekt erstellen wir als neues Projekt des Typs WPF-App (.NET Framework) für Visual Basic. Damit wir die nun zu erstellenden Elemente in eine Datenbank übertragen können, fügen wir dem Projekt ein neues Element des Typs ADO.NET Entity Data Model hinzu und nennen dieses FluidAPIContext (siehe Bild 1).

Entity Data Model hinzufügen

Bild 1: Entity Data Model hinzufügen

Dabei verwenden wir als Vorlage Leeres Code First-Modell (siehe Bild 2). Nach einem Klick auf die Schaltfläche Fertigstellen erhalten wir im Projektmappen-Explorer ein neues Element namens FluidAPIContext.vb sowie ein paar neue Einträge in der Datei App.config – zum Beispiel die Verbindungszeichenfolge zum Erstellen beziehungsweise für den Zugriff auf die Datenbank für diese Lösung.

Neues Entity Data Model als leeres Code First-Modell

Bild 2: Neues Entity Data Model als leeres Code First-Modell

Einfache Tabelle erstellen

Zu einer einfachen Tabelle gehört ein eindeutiges Primärschlüsselfeld mit Autowert-Funktion sowie die benötigten Felder. Wir beginnen mit einer Entität, auf deren Basis eine Tabelle namens Anreden entstehen soll. Diese soll die Felder ID und Name enthalten. Dazu legen wir eine neue Klassendatei namens Anrede.vb an. Der Code der Klasse lautet vorerst:

Public Class Anrede
     Public Property ID As Integer
     Public Property Name As String
End Class

Für dieses Element fügen wir der DbContext-Klasse eine Auflistung hinzu:

Public Class FluidAPIContext
     Inherits DbContext
     Public Sub New()
         MyBase.New("name=FluidAPIContext")
     End Sub
     Public Overridable Property Anreden As DbSet(Of Anrede)
End Class

Um daraus die Datenbank mit der ersten Tabelle zu erstellen, benötigen wir die Paket-Manager-Konsole, die wir mit dem Befehl Extras|NuGet-Paketmanager|Paket-Manager-Konsole anzeigen. In der Konsole setzen Sie nacheinander die folgenden Anweisungen ab:

  • Enable-Migrations: Aktiviert die Migrationen vom Entity Data Model zu einer SQL Server-Datenbank. Dies fügt den Ordner Migrations mit der Datei Configuration.vb zum Projekt im Projektmappen-Explorer hinzu.
  • Add-Migration Init: Erstellt die Befehle für die initiale Migration, die beispielsweise in einer Datei namens 202103111053588_Init.vb im Ordner Migrations angelegt wird. Die hier gespeicherten Befehle werden für das Erstellen beziehungsweise Anpassen der Datenbank verwendet.
  • Update-Database: Führt die in der mit Add-Migration erstellten Klasse enthaltenen Befehle aus, um die Datenbank erstmalig zu erstellen und die angegebene Tabelle anzulegen.

Dies erstellt die neue Datenbank und eine Tabelle, die wir uns im SQL Server Management Studio anschauen können (den Zielserver und den Namen der Datenbank können Sie der Verbindungszeichenfolge in der Datei App.config entnehmen). Das Ergebnis sieht wie in Bild 3 aus.

Die neue Tabelle in der frisch erzeugten Datenbank

 

Schreibe einen Kommentar