HResult–2146233087 Fehler beim Rumspielen mit dem Entity Framework und gelöschter Datenbank-MDF-Datei

25 09 2012

Beim Rumspielen mit dem Entity Framework 5 in Visual Studio 2012 und eines einfachen CodeFirst Projekts mit SQL-LocalDB, gab es ein Problem. Pragmatisch veranlagt löschte ich einfach die zugehörige MDF- und LDF-Datei aus dem aktuellen %USERPROFILE%, also Benutzer-Verzeichnis.

Blöd nur, dass danach die Fehlermeldung mit HResult –2146233087 erschien, mit dem netten Hinweis “An exception occured while initializing the database…”. Schön. Als das Projekt neu angelegt wurde, hatte es ja auch geklappt, warum nicht, wenn die MDF-Datei nicht mehr da ist?

Die Lösung liegt darin, dass LocalDB im Verzeichnis %USERPROFILE%\AppData\Local\Microsoft\Microsoft SQL Server Local DB\instances\v11.0 seine Systemdatenbanken liegen hat, welche über die von Codefirst erzeugten Datenbanken und Strukturen bescheid wissen. Dabei treten die Dateien MASTER.MDF, MODEL.MDF, MSDBDATA.MDF und TEMPDB.MDF in Aktion. Hier die offizielle Doku: http://msdn.microsoft.com/en-us/library/ms178028.aspx.

Wie bekommt man nun am einfachsten die Infos aus diesen Systemdatenbanken gelöscht? Dabei gibt es zwei Möglichkeiten. Die eine, das gesamte VS-Projekt umzubenennen wäre eine. Die bessere Variante aber ist der Aufruf von

dbContext.Database.Delete();

Dabei erscheint dann zwar wohl wieder eine Fehlermeldung allerdings nur mit der Fehlernummer 2, dass auf die betreffende MDF-Datei nicht zugreifen konnte und zwar die Benutzer-MDF-Datenbank. Geht ja auch nicht, weil ist ja gelöscht. Aber das Delete() sorgt fürs Aufräumen in den Systemdatenbanken.

Wichtig bei dieser Variante ist, dass weder Visual Studio noch ein anderes Programm die Systemdatenbanken offen hat, sonst könnte es zu neuen Fehlermeldungen kommen. Auch sollte man schauen dass die SQLSRV.EXE welche für LocalDB gestartet wird auch beendet ist.

Eine weitere Möglichkeit, wäre die Verwendung von SQL-Server-Tools:

http://social.msdn.microsoft.com/Forums/en-SG/adodotnetentityframework/thread/3801a8b3-9e3a-4369-96fe-1e2329c942a5








Follow

Erhalte jeden neuen Beitrag in deinen Posteingang.