Entity Framework 6 an die eigenen Bedürfnisse anpassen

Entity Framework 6 an die eigenen Bedürfnisse anpassen

Manfred Steyer


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. 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 Typ DbContext und dessen Subklassen ein. Den zweiten Typparameter schränkt sie hingegen auf den Typ DbMigrationsConfiguration ein. Daneben legt sie für diesen Typparameter fest, dass der hierdurch repräsentierte Typ einen parameterlosen Konstruktor aufzuweisen hat.

Der Konstruktor der betrachteten Implementierung nimmt die Vers...

Entity Framework 6 an die eigenen Bedürfnisse anpassen

Entity Framework 6 an die eigenen Bedürfnisse anpassen

Manfred Steyer


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. 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 Typ DbContext und dessen Subklassen ein. Den zweiten Typparameter schränkt sie hingegen auf den Typ DbMigrationsConfiguration ein. Daneben legt sie für diesen Typparameter fest, dass der hierdurch repräsentierte Typ einen parameterlosen Konstruktor aufzuweisen hat.

Der Konstruktor der betrachteten Implementierung nimmt die Vers...

Neugierig geworden?


    
Loading...

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