Entity Framework 6 an die eigenen Bedürfnisse anpassen

Entity Framework 6 an die eigenen Bedürfnisse anpassen


Entity Framework bietet einige Erweiterungspunkte, die dem Entwickler eine Anpassung an eigene Bedürfnisse erlauben. Damit kann er den O/R Mapper aus dem Hause Microsoft unter anderem veranlassen, Datenbanken auf benutzerdefinierte Weise zu initialisieren oder eine eigene Logik für die Pluralisierung von Klassennamen bereitzustellen.

Schon seit einigen Versionen existieren in Entity Framework Komponenten, die der Entwickler austauschen kann, um das Standardverhalten anzupassen. Bis dato musste er die zu verwendenden Komponenten über statische Eigenschaften und Methoden registrieren. Ab Version 6 existiert nun auch die Möglichkeit einer zentralen Konfigurationsklasse, die die gewünschten Komponenten an einer zentralen Stelle registriert. Darüber hinaus sind mit Entity Framework 6 weitere austauschbare Komponenten dazugekommen. Dieser Artikel wirft einen Blick auf einige dieser Komponenten, die nicht nur für Anbieter von Datenbankprovidern, sondern auch für Anwendungsentwickler interessant sein können.

Datenbank auf bestimmte Version migrieren

Entity Framework Code First bietet seit seinen ersten Tagen die Möglichkeit, eine Datenbank bei Verwendung des Kontexts zu initialisieren. Um hiervon Gebrauch zu machen, legt der Entwickler einen so genannten Data­base Initializer fest. Entity Framework bietet die folgenden Database Initializer an, wobei der Name jeweils Programm ist: DropCreateDatabaseAlways, DropCre­ate­Data­base­IfModelChanges, Create­Data­base­If­Not­Exists, Mi­grate­DatabaseToLatestVersion. Letzterer migriert die Datenbank unter Verwendung von Migrations auf die aktuellste Version, sofern sie nicht ohnehin schon in dieser vorliegt.

Um einen eigenen Database Initializer bereitzustellen, implementiert der Entwickler das Interface IDatabaseInitializer<T>. Der Typparameter T steht hier für den Typ des jeweiligen Kontexts. Ein Beispiel für einen benutzerdefinierten Database Initializer findet sich in Listing 1. Es zeigt einen Initializer, der im Gegensatz zu MigrateDatabaseToLatestVersion nicht auf die neueste Version, sondern auf eine an den Konstruktor zu übergebende Version migriert. Diese Implementierung weist zwei Typparameter auf: TContext repräsentiert den Typ des jeweiligen Kontexts und TMigrationsConfiguration den Typ der Konfigurationsklasse, die im Zuge der Aktivierung von Migrations generiert wird. Den ersten Typparameter delegiert die betrachtete Implementierung an das Interface IDatabaseInitializer. Daneben schränkt sie diesen auf den ...

Neugierig geworden?

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang