2012-08-25 6 views
7

Ich bin auf VS 2012 RTM, mit EF 5. Ich mache Code First, aber ich versuche, Code-Migrationen zu ignorieren, da ich gerade in der Entwicklung bin. Um sie zu vermeiden, habe ich dieseWie man mit LocalDB und EF arbeitet, ohne Migrationen zu verwenden

gesetzt
Database.SetInitializer(new DropCreateDatabaseIfModelChanges<SomeContext>()); 

gelegentlich, auch wenn ich nicht glaube, ich habe das Modell berührt, entscheidet sie neu zu erstellen. Das ist gut. In der Regel führt dies jedoch zum Fehler

Datenbank kann nicht gelöscht werden, weil sie gerade verwendet wird.

Also beschloss ich, die Datenbank vollständig zu löschen. Ich gehe in VS, gehe zum "SQL Server Object Explorer", finde die DB und lösche sie. Jetzt bin ich bei

Kann nicht hängen Sie die Datei ‚{0}‘ als Datenbank ‚{1}‘ stecken

Ich hatte diese letzte Nacht geschehen und ich fummelte gerade herum, bis es funktioniert (shut Tasks herunterfahren, VS neu starten, DB und Dateinamen in web.config etc. ändern.

Also Frage 1) Wie komme ich aus diesem Zustand heraus?

Aber die wichtigere Frage, wie verhindere ich, dass ich überhaupt in diesen Zustand komme?

+0

Warum nicht automatische Migrationen verwenden? Sie können die DB-Initialisierungsmethode jederzeit ändern, auch wenn Sie sie bei der Bereitstellung in der Produktion bereitstellen. –

+0

[This] (http://msdn.microsoft.com/en-us/data/jj554735) listet einige Gründe auf, warum ich keine automatischen Migrationen verwenden möchte. Außerdem erhalten Sie nur so weit, bis Sie Code-basierte Migrationen trotzdem verwenden müssen. –

+0

Ich stehe vor dem gleichen Problem haben Sie eine Lösung gefunden? – Shimmy

Antwort

5

Ich hatte das gleiche Problem und es geschafft, es zu beheben. Das Hauptproblem ist, dass EF die Datenbank nicht automatisch erstellt. Die Lösung ist nicht sehr schwer.

Zuerst gehen Sie in den Projektmappen-Explorer und erstellen Sie die Datenbank manuell. Wechseln Sie dazu in den Ordner, in dem sich Ihre Datenbank befindet (normalerweise App_Data). Klicken Sie mit der rechten Maustaste auf diesen Ordner und klicken Sie auf Hinzufügen -> Neues Element. Wählen Sie die Registerkarte Daten und wählen Sie SQL Server-Datenbank. Stellen Sie sicher, dass Sie den Namen eingeben, den Entity Framework erwartet (was in der Cannot attach the file '{0}' as database '{1}' Fehlermeldung angegeben ist).

Dann erhalten Sie höchstwahrscheinlich eine Fehlermeldung, die besagt, dass die Datenbank keine Modellmetadaten enthält. Um dies zu umgehen, Ihre Datenbank Initialisierung ändern:

Database.SetInitializer(new DropCreateDatabaseAlways<SomeContext>()); 

nun die Anwendung und die Datenbank sollte es mit Tabellen korrekt erstellt. Sobald dieser Schritt erfolgreich ausgeführt wurde, ändern Sie Ihre Datenbank initializer ändern zurück:

Database.SetInitializer(new DropCreateDatabaseIfModelChanges<SomeContext>()); 
+2

Danke für die Info, das war hilfreich. – Form

+1

Wirklich hilfreich! –

6

Der SQL Server Object Explorer Fenster kann eine Verbindung mit der Datenbank halten. Wenn Sie das Fenster schließen und alle geöffneten Fenster freigeben, wird die Verbindung getrennt.