24 January 2014 Code First, Entity Framework, Fix Robert Muehsig

Das Entity Framework Code First Model ist recht praktisch um eine kleine Datenbank schnell zu designen. Allerdings steckt etwas Magic (naja – Untertreibung – da steckt viel dunkles Yuyu und Voodoo) darin. Das EF-Model überprüft ob die Datenbank noch dazu passt und falls nicht gibt es verschiedenen Strategien. Die einfachste Strategie ist es immer die Datenbank neu zu erstellen. Das mag in einem Demoprojekt gehen, ist aber irgendwie nicht so clever.

Herr über die eigene Datenbank trotz EF Code First

Falls das Model und die Datenbank nicht mehr kompatibel sind, kommt eine Fehlermeldung. Diese Fehlermeldung habe ich allerdings schon gesehen obwohl die Datenbank oder das Model nicht manipuliert wurde:

The model backing the 'FooDbContext' context has changed since the database was created. Consider using Code First Migrations to update the database (http://go.microsoft.com/fwlink/?LinkId=238269).

Wenn man diese Prüfung übergehen, muss man beim Appikationsstart (z.B. in der Global.asax in ASP.NET) folgende Zeile einfügen:

Database.SetInitializer<FooDbContext>(null);

Damit wird die Überprüfung umgangen – die Funktionalität ist nicht eingeschränkt solange die Datenbank kompatibel zum Modell (und umgekehrt) ist. Aktuell nutze ich diese Variante in verschiedenen Projekten und komme damit ganz gut klar und bin trotzdem Herr über die Datenbank.

Wichtig: Das Entity Framework kann trotzdem wunderbar ohne diesen “DbInitializer” auskommen und man kann neue Entitäten und die Datenbank manuell ändern.

Über die Entity Framework API ist es auch möglich die Datenbank falls sie nicht vorhanden ist manuell zu erstellen. Dies geschieht über diesen Aufruf: Database.CreateIfNotExists

Damit kam ich meist recht gut aus.


Written by Robert Muehsig

Software Developer - from Dresden, Germany, now living & working in Switzerland. Microsoft MVP & Web Geek.
Other Projects: KnowYourStack.com | ExpensiveMeeting | EinKofferVollerReisen.de

If you like the content and want to support me you could buy me a beer or a coffee via Litecoin or Bitcoin - thanks for reading!