Verwenden von „migrate.exe“

„Code First“-Migrationen können verwendet werden, um eine Datenbank innerhalb von Visual Studio zu aktualisieren. Die Ausführung ist aber auch über das Befehlszeilentool „migrate.exe“ möglich. Diese Seite bietet einen schnellen Überblick über die Verwendung von „migrate.exe“ zum Ausführen von Migrationen für eine Datenbank.

Hinweis

In diesem Artikel wird davon ausgegangen, dass Ihnen bekannt ist, wie Sie „Code First“-Migrationen in einfachen Szenarien verwenden. Wenn nicht, sollten Sie „Code First“-Migrationen lesen, bevor Sie fortfahren.

Kopieren von „Migrate.exe“

Wenn Sie Entity Framework mit NuGet installieren, befindet sich „migrate.exe“ im Ordner „Tools“ des heruntergeladenen Pakets. Im <Projektordner>\packages\EntityFramework.<Version>\tools

Nachdem Sie „migrate.exe“ gefunden haben, müssen Sie das Programm an den Speicherort der Assembly kopieren, die Ihre Migrationen enthält.

Wenn Ihre Anwendung auf .NET 4 und nicht auf 4.5 ausgerichtet ist, müssen Sie auch die Redirect.config in den Speicherort kopieren und in migrate.exe.configumbenennen. Dadurch wird sichergestellt, dass „migrate.exe“ die richtigen Bindungsumleitungen erhält, um die Entity Framework-Assembly zu finden.

.NET 4.5 .NET 4.0
.NET 4.5 Files .NET 4.0 Files

Hinweis

„migrate.exe“ unterstützt keine x64-Assemblys.

Nachdem Sie „migrate.exe“ in den richtigen Ordner verschoben haben, sollten Sie das Programm verwenden können, um Migrationen für die Datenbank auszuführen. Das Hilfsprogramm dient ausschließlich zum Ausführen von Migrationen. Es kann keine Migrationen generieren oder ein SQL-Skript erstellen.

Weitere Informationen finden Sie unter Optionen

Migrate.exe /?

Durch obiges wird die Hilfeseite angezeigt, die diesem Hilfsprogramm zugeordnet ist. Beachten Sie, dass sich die EntityFramework.dll am selben Speicherort befinden muss, an dem Sie „migrate.exe“ ausführen, damit das Programm funktioniert.

Migrieren zur neuesten Migration

Migrate.exe MyMvcApplication.dll /startupConfigurationFile="..\\web.config"

Beim Ausführen von „migrate.exe“ ist der einzige obligatorische Parameter die Assembly, die die Migrationen enthält, die Sie ausführen möchten. Es werden jedoch alle konventionsbasierten Einstellungen verwendet, wenn Sie keine Konfigurationsdatei angeben.

Migrieren zu einer bestimmten Migration

Migrate.exe MyApp.exe /startupConfigurationFile="MyApp.exe.config" /targetMigration="AddTitle"

Wenn Sie Migrationen bis zu einer bestimmten Migration ausführen möchten, können Sie den Namen der Migration angeben. Dadurch werden alle vorherigen Migrationen nach Bedarf ausgeführt, bis sie das Programm zur angegebenen Migration gelangt.

Angeben des Arbeitsverzeichnisses

Migrate.exe MyApp.exe /startupConfigurationFile="MyApp.exe.config" /startupDirectory="c:\\MyApp"

Wenn die Assembly Abhängigkeiten aufweist oder Dateien relativ zum Arbeitsverzeichnis liest, müssen Sie dasd Verzeichnis „startupDirectory“ festlegen.

Angeben der zu verwendenden Migrationskonfiguration

Migrate.exe MyAssembly CustomConfig /startupConfigurationFile="..\\web.config"

Wenn Sie über mehrere Migrationskonfigurationsklassen verfügen, müssen Sie für Klassen, die von „DbMigrationConfiguration“ erben, angeben, welche für diese Ausführung verwendet werden soll. Sie geben dies an, indem Sie wie oben den optionalen zweiten Parameter ohne Switch angeben.

Bereitstellen der Verbindungszeichenfolge

Migrate.exe BlogDemo.dll /connectionString="Data Source=localhost;Initial Catalog=BlogDemo;Integrated Security=SSPI" /connectionProviderName="System.Data.SqlClient"

Wenn Sie in der Befehlszeile eine Verbindungszeichenfolge angeben möchten, müssen Sie auch den Anbieternamen angeben. Wenn Sie den Anbieternamen nicht angeben, wird eine Ausnahme ausgelöst.

Häufige Probleme

Fehlermeldung Lösung
Ausnahmefehler: System.IO.FileLoadException: Die Datei oder Assembly „EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089“ oder eine Abhängigkeit davon konnte nicht geladen werden. Die gefundene Manifestdefinition der Assembly stimmt nicht mit dem Assemblyverweis überein. (Ausnahme von HRESULT: 0x80131040) Dies bedeutet in der Regel, dass Sie eine .NET 4-Anwendung ohne die Redirect.config-Datei ausführen. Sie müssen die Redirect.config-Datei an denselben Speicherort wie „migrate.exe“ kopieren und dann in „migrate.exe.config“ umbenennen.
Ausnahmefehler: System.IO.FileLoadException: Die Datei oder Assembly „EntityFramework, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089“ oder eine Abhängigkeit davon konnte nicht geladen werden. Die gefundene Manifestdefinition der Assembly stimmt nicht mit dem Assemblyverweis überein. (Ausnahme von HRESULT: 0x80131040) Diese Ausnahme bedeutet, dass Sie eine .NET 4.5-Anwendung ausführen, bei der die Redirect.config-Datei in den Speicherort von „migrate.exe“ kopiert wurde. Wenn Ihre App .NET 4.5 ist, brauchen Sie die Konfigurationsdatei mit den Umleitungen darin nicht. Löschen Sie die Datei „migrate.exe.config“.
FEHLER: Die Datenbank kann nicht aktualisiert werden, damit sie mit dem aktuellen Modell übereinstimmt, da ausstehende Änderungen vorhanden sind und die automatische Migration deaktiviert ist. Schreiben Sie entweder die ausstehenden Modelländerungen in eine codebasierte Migration, oder aktivieren Sie die automatische Migration. Legen Sie „DbMigrationsConfiguration.AutomaticMigrationsEnabled“ auf „WAHR“ fest, um die automatische Migration zu aktivieren. Dieser Fehler tritt auf, wenn die Migration ausgeführt wird, obwohl Sie keine Migration erstellt haben, um am Modell gemachte Änderungen zu bewältigen, und die Datenbank nicht mit dem Modell übereinstimmt. Ein Beispiel dafür ist das Hinzufügen einer Eigenschaft zu einer Modellklasse, die dann „migrate.exe“ ausführt, ohne eine Migration zum Upgrade der Datenbank zu erstellen.
FEHLER: Der Typ wird für das Element „System.Data.Entity.Migrations.Design.ToolingFacade+UpdateRunner,EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089“ nicht aufgelöst. Dieser Fehler kann durch Angabe eines falschen Startverzeichnisses verursacht werden. Es muss der Speicherort von „migrate.exe“ sein.
Ausnahmefehler: System.NullReferenceException: Objektverweis ist nicht auf eine Instanz eines Objekts festgelegt.
   bei System.Data.Entity.Migrations.Console.Program.Main(String[] args)
Dieser Fehler kann dadurch verursacht werden, dass Sie für ein von Ihnen verwendetes Szenario einen erforderlichen Parameter nicht angegeben haben. Ein Beispiel wäre das Angeben einer Verbindungszeichenfolge ohne Angabe des Anbieternamens.
FEHLER: In der Assembly „ClassLibrary1“ wurden mehrere Migrationskonfigurationstypen gefunden. Geben Sie den Namen des zu verwendenden an. Wie der Fehler schon sagt, gibt es in der angegebenen Assembly mehr als eine Konfigurationsklasse. Sie müssen den Switch „/configurationType“ verwenden, um anzugeben, welche verwendet werden soll.
FEHLER: Die Datei oder Assembly <assemblyName> oder eine ihrer Abhängigkeiten konnte nicht geladen werden. Der angegebene Assemblyname oder die Codebasis ist ungültig. (Ausnahme von HRESULT: 0x80131047) Dieser Fehler kann dadurch verursacht werden, dass ein Assemblyname falsch angegeben wurde oder nicht vorhanden ist.
FEHLER: Die Datei oder Assembly <assemblyName> oder eine ihrer Abhängigkeiten konnte nicht geladen werden. Es wurde versucht, ein Programm mit einem falschen Format zu laden. Dies geschieht, wenn Sie versuchen, „migrate.exe“ für eine x64-Anwendung auszuführen. EF 5.0 und niedriger funktionieren nur auf x86.