15

deaktivieren Wie Code-first-Funktion in EF (Visual Studio 2012)Wie Code-first-Funktion in EF (MVC4 Visual Studio 2012)

Ich bin mit Visual Studio 2012, MVC4 (Internet-Anwendungsvorlage) deaktivieren.

Ich möchte EF verwenden, aber nicht mit seiner Code-First-Funktion. Ich möchte, dass die Anwendung ausfällt, anstatt meine Datenbank basierend auf meinem Code zu erstellen oder zu ändern. (Ich kann einfach nicht mit diesem Gefühl leben, dass meine Datenbank hinter den Kulissen geändert wird ... Ich möchte, dass die Anwendung die exakte Datenbank verwendet, die ich erstellt habe ... und wenn es etwas gibt, das geändert werden muss, dann werde ich es tun mache ich es selbst)

ist das mit dem neuen Ef (VS2012) möglich?

Ich habe schon viele Leute gefragt, aber bis jetzt kann ich die Antwort nicht finden.

Antwort

23

können Sie Code Zuerst verwenden und sicherstellen, dass Ihre Datenbank nicht aktualisiert wird oder überschrieben, wenn Sie das Modell ändern, indem Sie die Datenbank initializer zu null Einstellung:

Database.SetInitializer<MyDbContext>(null); 

Es ist eine statische Methode der Database Klasse und sollte aufgerufen am Anfang Ihrer Anwendung, zum Beispiel in global.asax oder in einem statischen Konstruktor Ihrer Kontextklasse. Dazu müssen Sie die Modellklasse und das Datenbankschema manuell ändern, damit sie übereinstimmen.

Sie können auch die Reverse Engineer-Funktion verwenden, um ein Code First-Modell aus einer vorhandenen Datenbank zu erstellen. Es wird hier erklärt: http://msdn.microsoft.com/en-us/data/jj200620

Oder, wenn Sie nicht auf den gesamten Code Zuerst verwenden möchten, und mit einem Modell-Designer arbeiten Sie den Datenbank-First-Ansatz nutzen können, erklärt hier: http://msdn.microsoft.com/en-us/data/jj206878

Eine Übersicht über alle Mögliche Optionen sind hier: http://msdn.microsoft.com/en-us/data/ee712907.aspx

+1

danke! Ich wurde verrückt, als ich eine existierende Lösung durchsuchte, um herauszufinden, warum Code First nicht funktionierte. Und nach diesem Post finde ich diesen Code in der Datei global.asax.cs -> Database.SetInitializer (null); – shake

+0

Also hier ist, was ich nicht verstehe: In meinem Controller habe ich ein privates Feld mit dem Kontext. Dieses Feld wird über den parameterlosen Konstruktor initialisiert, der die obige Zeile enthält. Als Nächstes werde ich an eine Controller-Methode weitergeleitet, die abstürzt, wenn EF versucht, die Datenbank zu löschen. Wie kann das sein? Bedeutet es, dass ich den Superkonstruktor für den Kontext anrufe, mit dem Namen meiner Context-Klasse als String-Parameter. –