Korzystanie z pliku migrate.exe

Migracje Code First można użyć do zaktualizowania bazy danych z poziomu programu Visual Studio, ale można również wykonać za pomocą narzędzia wiersza polecenia migrate.exe. Ta strona zawiera krótkie omówienie sposobu wykonywania migracji w bazie danych przy użyciu pliku migrate.exe.

Uwaga

W tym artykule założono, że wiesz, jak używać Migracje Code First w podstawowych scenariuszach. Jeśli tego nie zrobisz, musisz przeczytać Migracje Code First przed kontynuowaniem.

Kopiowanie pliku migrate.exe

Podczas instalowania programu Entity Framework przy użyciu narzędzia NuGet migrate.exe będzie znajdować się w folderze tools pobranego pakietu. W <folderze> projektu\packages\EntityFramework.<version>\tools

Po przeprowadzeniu migracji.exe należy skopiować go do lokalizacji zestawu zawierającego migracje.

Jeśli aplikacja jest przeznaczona dla platformy .NET 4, a nie 4.5, musisz skopiować plik Redirect.config do lokalizacji i zmienić jego nazwę migrate.exe.config. Dzięki temu plik migrate.exe pobiera poprawne przekierowania powiązań, aby można było zlokalizować zestaw Programu Entity Framework.

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

Uwaga

plik migrate.exe nie obsługuje zestawów x64.

Po przeniesieniu pliku migrate.exe do poprawnego folderu powinno być możliwe użycie go do wykonywania migracji do bazy danych. Wszystkie narzędzia są przeznaczone do wykonania, to wykonywanie migracji. Nie może wygenerować migracji ani utworzyć skryptu SQL.

Zobacz opcje

Migrate.exe /?

W powyższej sekcji zostanie wyświetlona strona pomocy skojarzona z tym narzędziem. Należy pamiętać, że element EntityFramework.dll musi być w tej samej lokalizacji, w której jest uruchomiony plik migrate.exe, aby to zadziałało.

Migrowanie do najnowszej migracji

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

Podczas uruchamiania pliku migrate.exe jedynym obowiązkowym parametrem jest zestaw, który zawiera migracje, które próbujesz uruchomić, ale będzie używać wszystkich ustawień opartych na konwencji, jeśli nie określisz pliku konfiguracji.

Migrowanie do określonej migracji

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

Jeśli chcesz uruchomić migracje do określonej migracji, możesz określić nazwę migracji. Spowoduje to uruchomienie wszystkich poprzednich migracji zgodnie z potrzebami do momentu uzyskania określonej migracji.

Określanie katalogu roboczego

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

Jeśli zestaw ma zależności lub odczytuje pliki względem katalogu roboczego, musisz ustawić element startupDirectory.

Określanie konfiguracji migracji do użycia

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

Jeśli masz wiele klas konfiguracji migracji, klasy dziedziczone z dbMigrationConfigurationConfiguration, należy określić, który z nich ma być używany do tego wykonania. Jest to określane przez podanie opcjonalnego drugiego parametru bez przełącznika, jak pokazano powyżej.

Podaj parametry połączenia

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

Jeśli chcesz określić parametry połączenia w wierszu polecenia, musisz również podać nazwę dostawcy. Nieokreślinie nazwy dostawcy spowoduje wyjątek.

Typowe problemy

Komunikat o błędzie Rozwiązanie
Nieobsługiwany wyjątek: System.IO.FileLoadException: Nie można załadować pliku lub zestawu "EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" lub jednej z jego zależności. Definicja manifestu zlokalizowanego zestawu jest niezgodna z odwołaniem do zestawu. (Wyjątek od HRESULT: 0x80131040) Zazwyczaj oznacza to, że używasz aplikacji platformy .NET 4 bez pliku Redirect.config. Musisz skopiować plik Redirect.config do tej samej lokalizacji co plik migrate.exe i zmienić jego nazwę na migrate.exe.config.
Nieobsługiwany wyjątek: System.IO.FileLoadException: Nie można załadować pliku lub zestawu "EntityFramework, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" lub jednej z jego zależności. Definicja manifestu zlokalizowanego zestawu jest niezgodna z odwołaniem do zestawu. (Wyjątek od HRESULT: 0x80131040) Ten wyjątek oznacza, że używasz aplikacji .NET 4.5 z konfiguracją Redirect.config skopiowaną do lokalizacji migrate.exe. Jeśli aplikacja jest platformą .NET 4.5, nie musisz mieć pliku konfiguracji z przekierowaniami wewnątrz. Usuń plik migrate.exe.config.
BŁĄD: Nie można zaktualizować bazy danych tak, aby była zgodna z bieżącym modelem, ponieważ istnieją oczekujące zmiany i automatyczna migracja jest wyłączona. Zapisz oczekujące zmiany modelu w migracji opartej na kodzie lub włącz migrację automatyczną. Ustaw wartość DbMigrationsConfiguration.AutomaticMigrationsEnabled na wartość true, aby włączyć automatyczną migrację. Ten błąd występuje w przypadku uruchomienia migracji, gdy nie utworzono migracji w celu radzenia sobie ze zmianami wprowadzonych w modelu, a baza danych nie jest zgodna z modelem. Dodanie właściwości do klasy modelu, a następnie uruchomienie pliku migrate.exe bez utworzenia migracji w celu uaktualnienia bazy danych jest przykładem tego.
BŁĄD: Typ nie jest rozpoznawany dla elementu członkowskiego "System.Data.Entity.Migrations.Design.ToolingFacade+UpdateRunner,EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089". Ten błąd może być spowodowany przez określenie nieprawidłowego katalogu uruchamiania. Musi to być lokalizacja pliku migrate.exe
Nieobsługiwany wyjątek: System.NullReferenceException: Odwołanie do obiektu nie jest ustawione na wystąpienie obiektu.
   w: System.Data.Entity.Migrations.Console.Program.Main(String[] args)
Może to być spowodowane brakiem określenia wymaganego parametru dla używanego scenariusza. Na przykład określanie parametry połączenia bez określania nazwy dostawcy.
BŁĄD: W zestawie "ClassLibrary1" znaleziono więcej niż jeden typ konfiguracji migracji. Określ nazwę, która ma być używana. W miarę stanu błędu w danym zestawie istnieje więcej niż jedna klasa konfiguracji. Należy użyć przełącznika /configurationType, aby określić, które z nich mają być używane.
BŁĄD: Nie można załadować pliku lub zestawu "<assemblyName>" lub jednej z jego zależności. Podana nazwa zestawu lub baza kodu była nieprawidłowa. (Wyjątek od HRESULT: 0x80131047) Może to być spowodowane niepoprawnym określeniem nazwy zestawu lub brakiem
BŁĄD: Nie można załadować pliku lub zestawu "<assemblyName>" lub jednej z jego zależności. Podjęto próbę załadowania programu z nieprawidłowym formatem. Dzieje się tak, jeśli próbujesz uruchomić plik migrate.exe dla aplikacji x64. Program EF 5.0 i starsze będą działać tylko na platformie x86.