it-swarm.com.de

Entity-Framework-Code zuerst - Ausführen von Update-Database für die Produktionsdatenbank

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 dies für Produktionsdaten verwenden?

Wenn ich also eine Änderung an meiner Anwendung vornehme und dann die Veröffentlichung über Visual Studio starte, funktioniert dies auf der Codeseite einwandfrei, aber wie führe ich den Befehl 'Update-Database' für die Produktionsdaten aus.

Hoffe, diese Frage macht Sinn ...

Vielen Dank,

67
ironman

Um hinzuzufügen, was @David bereits gesagt hat ...

Persönlich vertraue ich nicht automatic updates in "Live" -Szenarien, und ich bevorzuge immer die manuelle Datenbankverwaltung (dh es gibt ein Problem mit permissions, das zum Erstellen oder Ändern von Db erforderlich ist - ganz zu schweigen von Shared Hosting usw.) - aber von dem, was ich habe Migrationen sind in Bezug auf die Synchronisierung ziemlich solide (die einzige Möglichkeit, sie zu lösen, besteht normalerweise darin, die Datenbank zu entfernen und ein vollständiges/frisches Update zu erzwingen).

Hier ist ein Beitrag, den ich vor einiger Zeit gemacht habe, wie man script und synchronize database / code und auf Bereitstellungsszenarien ausgerichtet (und wenn Probleme auftreten). Es trifft (noch) nicht auf Sie zu, sollte aber beachtet werden.

MVC3 und Code First Migrations - "Das Modell, das den Kontext 'blah' unterstützt, hat sich geändert, seit die Datenbank erstellt wurde"

24
NSGaga

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 nun die manuelle Steuerung der Migration bevorzugen, 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 Ein SQL-Skript erhalten)

31
David Moore

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, es sei denn, Sie können in sehr einfachen Szenarien der automatischen Migration vertrauen und eine manuelle Migration der Datenbank (en) ist nicht möglich. Bitte lesen Sie diese Antwort: https://stackoverflow.com/a/15718190/2279059 . Wenn Sie diese Warnung nicht beachten, lesen Sie weiter.

Fügen Sie web.config Folgendes hinzu:

<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 mit web.config Kein Glück haben, können Sie auch versuchen, diesen Code in Global.asax Einzufügen. Ich persönlich bevorzuge die Konfiguration gegenüber dem Code.

Wenn Ihre Konfigurationsdatei sauberer aussehen soll, können Sie auch eine neue Klasse aus der Klasse template MigrateDatabaseToLatestVersion ableiten, sodass Sie die kryptische Syntax nicht für die Übergabe von Typargumenten in Ihrem web.cofig Verwenden müssen. Datei:

public class MyDatabaseInitializer : public MigrateDatabaseToLatestVersion<MyContext, Migrations.Configuration> {}

Hierdurch 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 )

4
Florian Winter