Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Code First Migrationen können verwendet werden, um eine Datenbank aus Visual Studio zu aktualisieren, kann aber auch über das Befehlszeilentool migrate.exeausgeführt werden. Auf dieser Seite erhalten Sie 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 Sie wissen, wie Sie Code First-Migrationen in grundlegenden Szenarien verwenden. Wenn Sie dies nicht tun, müssen Sie Code First Migrations lesen, bevor Sie fortfahren.
migrate.exe kopieren
Wenn Sie Entity Framework mit NuGet installieren, wird migrate.exe sich im Ordner "tools" des heruntergeladenen Pakets befinden. Im <Projektordner>\packages\EntityFramework.<version>\tools
Nachdem Sie migrate.exe haben, müssen Sie sie 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 die Redirect.config ebenfalls in den Speicherort kopieren und in migrate.exe.configumbenennen. Dies ist so, dass migrate.exe die richtigen Bindungsumleitungen abruft, um die Entity Framework-Assembly zu finden.
| .NET 4.5 | .NET 4.0 |
|---|---|
|
|
Hinweis
migrate.exe unterstützt keine x64-Assemblys.
Nachdem Sie migrate.exe in den richtigen Ordner verschoben haben, sollten Sie es verwenden können, um Migrationen für die Datenbank auszuführen. Das gesamte Hilfsprogramm dient zum Ausführen von Migrationen. Es kann keine Migrationen generieren oder ein SQL-Skript erstellen.
Optionen anzeigen
Migrate.exe /?
In der obigen Abbildung wird die hilfeseite angezeigt, die diesem Dienstprogramm zugeordnet ist. Beachten Sie, dass Sie die EntityFramework.dll an demselben Speicherort haben müssen, an dem Sie migrate.exe ausführen, damit dies funktioniert.
Auf die neueste Version migrieren
Migrate.exe MyMvcApplication.dll /startupConfigurationFile="..\\web.config"
Bei der Ausführung migrate.exe ist der einzige obligatorische Parameter die Assembly, bei der es sich um die Assembly handelt, die die Migrationen enthält, die Sie ausführen möchten, es werden jedoch alle konventionsbasierten Einstellungen verwendet, wenn Sie die Konfigurationsdatei nicht angeben.
Migration auf eine bestimmte Version durchführen
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 die angegebene Migration erreicht wird.
Arbeitsverzeichnis angeben
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 startupDirectory festlegen.
Angeben der zu verwendenden Migrationskonfiguration
Migrate.exe MyAssembly CustomConfig /startupConfigurationFile="..\\web.config"
Wenn Sie über mehrere Migrationskonfigurationsklassen verfügen, müssen Sie klassen, die von DbMigrationConfiguration erben, angeben, welche für diese Ausführung verwendet werden soll. Dies wird angegeben, indem der optionale zweite Parameter ohne Schalter wie oben angegeben angegeben wird.
Verbindungszeichenfolge bereitstellen
Migrate.exe BlogDemo.dll /connectionString="Data Source=localhost;Initial Catalog=BlogDemo;Integrated Security=SSPI" /connectionProviderName="System.Data.SqlClient"
Wenn Sie an 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 |
|---|---|
| Nicht behandelte Ausnahme: System.IO.FileLoadException: Datei oder Assembly 'EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' oder eine ihrer Abhängigkeiten 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 an denselben Speicherort wie migrate.exe kopieren und in migrate.exe.configumbenennen. |
| Unbehandelte Ausnahme: System.IO.FileLoadException: Datei oder Assembly 'EntityFramework, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' oder eine ihrer Abhängigkeiten konnte nicht geladen werden. Die gefundene Manifestdefinition der Assembly stimmt nicht mit der Assembly-Referenz überein. (Ausnahme von HRESULT: 0x80131040) | Diese Ausnahme bedeutet, dass Sie eine .NET 4.5-Anwendung ausführen, deren Redirect.config an den migrate.exe Speicherort kopiert wurde. Wenn Ihre App auf .NET 4.5 basiert, müssen Sie keine Konfigurationsdatei mit Umleitungen haben. Löschen Sie die migrate.exe.config Datei. |
| 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 "true" fest, um die automatische Migration zu aktivieren. | Dieser Fehler tritt auf, wenn Sie den Migrationsprozess ausführen, ohne eine Migration erstellt zu haben, um Änderungen am Modell zu berücksichtigen, und wenn die Datenbank nicht mit dem Modell übereinstimmt. Das Hinzufügen einer Eigenschaft zu einer Modellklasse und anschließendes Ausführen von Migrate.exe ohne Erstellung einer Migration zum Upgrade der Datenbank ist ein Beispiel dafür. |
| FEHLER: Der Typ kann für das Element 'System.Data.Entity.Migrations.Design.ToolingFacade+UpdateRunner,EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' nicht bestimmt werden. | Dieser Fehler kann durch Angabe eines falschen Startverzeichnisses verursacht werden. Dies muss der Speicherort von migrate.exe sein. |
| Nicht behandelte Ausnahme: System.NullReferenceException: Objektverweis ist nicht auf eine Instanz eines Objekts gesetzt. at System.Data.Entity.Migrations.Console.Program.Main(String[] args) |
Dies kann dadurch verursacht werden, dass für ein von Ihnen verwendetes Szenario kein erforderlicher Parameter angegeben wird. Beispiel: Angeben einer Verbindungszeichenfolge ohne Angabe des Anbieternamens. |
| FEHLER: In der Assembly 'ClassLibrary1' wurden mehrere Migrationskonfigurationstypen gefunden. Geben Sie den zu verwendenden Namen an. | Wie der Fehler zugibt, gibt es mehr als eine Konfigurationsklasse in der angegebenen Assembly. Sie müssen den Switch "/configurationType" verwenden, um anzugeben, welche Option verwendet werden soll. |
| FEHLER: Datei oder Assembly '<assemblyName>' oder eine ihrer Abhängigkeiten konnte nicht geladen werden. Der angegebene Assemblyname oder die Codebasis war ungültig. (Ausnahme von HRESULT: 0x80131047) | Dies kann dadurch verursacht werden, dass ein Assemblyname falsch angegeben oder nicht vorhanden ist. |
| FEHLER: 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 unten funktionieren nur auf x86. |