Donnerstag, 3. Mai 2012

Automatisches Laden von EF Konfigurationen

Normalerweise der der Ansatz von Entity Framework Code First ein "Convention over Configuration". Allerdings wird man aus meiner Sicht nicht umher kommen, an der einen oder andere Stelle die Konventionen mit geeigneten Konfigurationen zu ergänzen bzw. zu überschreiben.

Entity Framework bietet für diesen Zweck zwei Möglichkeiten an:

DbContext.OnModelCreating

Indem man "OnModelCreating" auf dem "DbContext" überschreibt, hat man Zugriff auf den "DbModelBuilder", mit dessen Hilfe man beliebige Entitäten konfigurieren kann.

EntityTypeConfiguration und ComplexTypeConfiguration

Die andere Möglichkeit besteht darin, eigene Konfigurationsklassen zu schreiben, welche von "EntityTypeConfiguration" bzw. "ComplexTypeConfiguration" ableiten. Eine gute Übersicht hierfür bietet der Artikel Configuring Entity Framework 4 ‘CodeFirst’.

Diese Konfigurationsklassen müssen nun dem "DbModelBuilder" bekannte gemacht werden. Auch dies geschieht durch eine Überladung von "OnModelCreating".

Aus Gründen der Wartbarkeit (und vielen anderen Design-Überlegungen) würde ich jedem empfehlen diese Variante zu bevorzugen, da hierbei die einzelnen Konfigurationen für die unterschiedlichen Entitäten getrennt voneinander definiert sind.

Automatisches Laden von EF Konfigurationen

Ein Manko hat die Konfigurationsklassen allerdings: man muss sie einzeln dem DbModelBuilder bekannt machen. An dieser Stelle war ich auch etwas enttäuscht von EF, da ich es bspw. von Fluent NHibernate gewohnt bin, dass diese automatisch geladen werden.

So entschloss ich mich kurzerhand eine Lösung für EF Code First zu schreiben, welche in der selben Assembly, wo der DbContext deklariert ist, nach Konfigurationsklassen vom Basistypen EntityTypeConfiguration bzw. ComplexTypeConfiguration sucht. (vorweg: ohne dynamic geht es an dieser Stelle nicht - außer ihr mögt Reflektion...)

Keine Kommentare:

Kommentar veröffentlichen