Ich möchte wissen, wie der Befehl 'Update-Database' für eine Produktionsdatenbank ausgeführt wird.
Die 'Update-Database'-Datenbank funktioniert auf meinem lokalen Computer einwandfrei. Wie kann ich jedoch erreichen, dass dies für Produktionsdaten funktioniert?
Wenn ich also eine Änderung an meiner Anwendung vornehme und dann die Veröffentlichung über Visual Studio ausführe, funktioniert dies auf der Codeseite einwandfrei. Wie führe ich jedoch den Befehl "Update-Database" für die Produktionsdaten aus?
Hoffe diese Frage macht Sinn ...
Vielen Dank,
c#
asp.net-mvc
entity-framework
Ironman
quelle
quelle
Antworten:
Um hinzuzufügen, was @David bereits gesagt hat ...
Persönlich vertraue ich nicht
automatic updates
auf "Live" -Szenarien und bevorzuge immer die manuelle Datenbankverwaltung (dh es gibt ein Problem beimpermissions
Erstellen oder Ändern von Db - ganz zu schweigen von Shared Hosting usw.) - aber von dem, was ich gesehen habe Migrationen sind ziemlich solide, wenn es um die Synchronisierung geht (tatsächlich besteht die einzige Möglichkeit, sie normalerweise zu "lösen", darin, die Datenbank zu entfernen und ein vollständiges / neues Update zu erzwingen).Hier ist ein Beitrag habe ich ein gemachter Vor einiger Zeit auf , wie
script
undsynchronize database / code
und darauf ausgerichtet , Einsatzszenarien (und wenn Probleme auftreten). Es trifft (noch) nicht auf Sie zu, aber etwas, das Sie beachten sollten.MVC3- und Code First-Migrationen - "Das Modell, das den 'bla'-Kontext unterstützt, hat sich seit der Erstellung der Datenbank geändert."
quelle
Siehe Verwenden von Entity Framework-Migrationen (Code zuerst) in der Produktion, damit Ihre Anwendung die Datenbank automatisch aktualisiert, wenn das Entity Framework initialisiert wird.
Wenn Sie die manuelle Kontrolle über die Migration bequemer haben, können Sie das Argument -Script für den Befehl Update-Database auf Ihrem Entwicklercomputer verwenden, um SQL-Skripts zu generieren, die Sie dann für die Produktionsdatenbank ausführen können.
http://msdn.microsoft.com/en-us/data/jj591621.aspx (siehe Abschnitt zum Abrufen eines SQL-Skripts)
quelle
Möchten Sie die Datenbank nur automatisch auf die neueste Version aktualisieren, wann und wo immer Ihre Anwendung ausgeführt wird (Entwicklung und Produktion)?
Dies ist möglicherweise keine gute Idee, außer in sehr einfachen Szenarien, in denen Sie wissen, dass Sie der automatischen Migration vertrauen können und eine manuelle Migration der Datenbank (en) nicht möglich ist. Bitte lesen Sie diese Antwort: https://stackoverflow.com/a/15718190/2279059 . Wenn Sie diese Warnung nicht beachten, lesen Sie weiter.
Fügen Sie Folgendes hinzu
web.config
:<entityFramework> <contexts> <context type="MyAssembly.MyContext, MyAssembly" disableDatabaseInitialization="false"> <databaseInitializer type="System.Data.Entity.MigrateDatabaseToLatestVersion`2[[MyAssembly.MyContext, MyAssembly], [MyAssembly.Migrations.Configuration, MyAssembly]], EntityFramework" /> </context> </contexts>
Dies mag beängstigend aussehen, entspricht jedoch im Wesentlichen dem folgenden Code:
Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyContext, Migrations.Configuration>());
Wenn Sie kein Glück haben
web.config
, können Sie auch versuchen, diesen Code einzugebenGlobal.asax
. Ich persönlich bevorzuge die Konfiguration gegenüber dem Code.Wenn Ihre Konfigurationsdatei übersichtlicher aussehen soll, können Sie auch eine neue Klasse aus der Vorlagenklasse ableiten,
MigrateDatabaseToLatestVersion
sodass Sie die kryptische Syntax nicht zum Übergeben von Typargumenten in Ihrerweb.cofig
Datei verwenden müssen:public class MyDatabaseInitializer : public MigrateDatabaseToLatestVersion<MyContext, Migrations.Configuration> {}
Dadurch wird ein Datenbankinitialisierer festgelegt, der die Datenbank automatisch auf die neueste Version aktualisiert.
(Quelle und weitere Details: http://www.ralphlavelle.net/2012/09/entity-framework-code-first-webconfig.html )
quelle
Eine andere Lösung, die für mich funktioniert hat, war folgende: In meiner lokalen Datei web.config habe ich die Verbindungszeichenfolge so festgelegt, dass sie auf den Produktionsserver verweist.
Anschließend werden alle PM Console-Befehle auf dem Produktionsserver ausgeführt. Ich kann
update-database
Migrationen nach Bedarf zurücksetzen oder zurücksetzen, und die Änderungen gelten für die Produktionsdatenbank.quelle