Korzystanie z programu zmigrować. exeUsing migrate.exe

Migracje Code First można użyć do zaktualizowania bazy danych z poziomu programu Visual Studio, ale można ją również wykonać za pomocą narzędzia wiersza polecenia migruje. exe.Code First Migrations can be used to update a database from inside visual studio, but can also be executed via the command line tool migrate.exe. Ta strona zawiera krótkie omówienie sposobu używania programu Migration. exe do wykonywania migracji względem bazy danych programu.This page will give a quick overview on how to use migrate.exe to execute migrations against a database.

Uwaga

W tym artykule założono, że wiesz, jak używać Migracje Code First w podstawowych scenariuszach.This article assumes you know how to use Code First Migrations in basic scenarios. Jeśli tego nie zrobisz, musisz przeczytać migracje Code First przed kontynuowaniem.If you don’t, then you’ll need to read Code First Migrations before continuing.

Kopiuj plik zmigrować. exeCopy migrate.exe

W przypadku instalowania Entity Framework przy użyciu programu NuGet. exe zostanie umieszczony w folderze Tools pobranego pakietu.When you install Entity Framework using NuGet migrate.exe will be inside the tools folder of the downloaded package. W folderze projektu <>pakiety \\EntityFramework.<wersja>narzędzia \In <project folder>\packages\EntityFramework.<version>\tools

Po przeprowadzeniu migracji pliku exe należy skopiować go do lokalizacji zestawu, który zawiera migracje.Once you have migrate.exe then you need to copy it to the location of the assembly that contains your migrations.

Jeśli aplikacja jest przeznaczona dla platformy .NET 4, a nie 4,5, należy skopiować plik redirect. config do lokalizacji i zmienić jego nazwę na zmigrować. exe. config. Jest tak dlatego, że program migruje. exe pobiera poprawne przekierowania powiązań, aby można było zlokalizować zestaw Entity Framework.If your application targets .NET 4, and not 4.5, then you will need to copy the Redirect.config into the location as well and rename it migrate.exe.config. This is so that migrate.exe gets the correct binding redirects to be able to locate the Entity Framework assembly.

.NET 4.5.NET 4.5 .NET 4.0.NET 4.0
Pliki programu .NET 4,5 Pliki programu .NET 4,0

Uwaga

Migracja. exe nie obsługuje zestawów x64.migrate.exe doesn't support x64 assemblies.

Po przeniesieniu pliku Migration. exe do prawidłowego folderu należy go używać do wykonywania migracji do bazy danych programu.Once you have moved migrate.exe to the correct folder then you should be able to use it to execute migrations against the database. Wszystkie narzędzia są przeznaczone do wykonywania migracji.All the utility is designed to do is execute migrations. Nie można wygenerować migracji ani utworzyć skryptu SQL.It cannot generate migrations or create a SQL script.

Zobacz OpcjeSee options

Migrate.exe /?

W powyższym oknie zostanie wyświetlona strona pomocy skojarzona z tym narzędziem. należy pamiętać, że w tej samej lokalizacji, w której uruchomiono plik migruje. exe, trzeba mieć EntityFramework. dll.The above will display the help page associated with this utility, note that you will need to have the EntityFramework.dll in the same location that you are running migrate.exe in order for this to work.

Migrowanie do najnowszej migracjiMigrate to the latest migration

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

Podczas uruchamiania programu Migration. exe jedynym obowiązkowym parametrem jest zestaw, który jest zestawem zawierającym migracje, które próbujesz uruchomić, ale będzie używać wszystkich ustawień opartych na Konwencji, jeśli nie określisz pliku konfiguracji.When running migrate.exe the only mandatory parameter is the assembly, which is the assembly that contains the migrations that you are trying to run, but it will use all convention based settings if you do not specify the configuration file.

Migrowanie do określonej migracjiMigrate to a specific migration

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

Jeśli chcesz przeprowadzić migrację do określonej migracji, możesz określić nazwę migracji.If you want to run migrations up to a specific migration, then you can specify the name of the migration. Spowoduje to uruchomienie wszystkich wcześniejszych migracji zgodnie z wymaganiami do momentu podanej migracji.This will run all previous migrations as required until getting to the migration specified.

Określ katalog roboczySpecify working directory

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, należy ustawić startupDirectory.If you assembly has dependencies or reads files relative to the working directory then you will need to set startupDirectory.

Określ konfigurację migracji do użyciaSpecify migration configuration to use

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

Jeśli masz wiele klas konfiguracji migracji, klasy dziedziczenia z DbMigrationConfiguration, należy określić, który ma być używany dla tego wykonania.If you have multiple migration configuration classes, classes inheriting from DbMigrationConfiguration, then you need to specify which is to be used for this execution. Jest to określone przez podanie opcjonalnego drugiego parametru bez przełącznika jak powyżej.This is specified by providing the optional second parameter without a switch as above.

Podaj parametry połączeniaProvide connection string

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, należy również podać nazwę dostawcy.If you wish to specify a connection string at the command line then you must also provide the provider name. Nieokreślanie nazwy dostawcy spowoduje wystąpienie wyjątku.Not specifying the provider name will cause an exception.

Typowe problemyCommon Problems

Komunikat o błędzieError Message RozwiązanieSolution
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.Unhandled Exception: System.IO.FileLoadException: Could not load file or assembly 'EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' or one of its dependencies. Zlokalizowana definicja manifestu zestawu nie odpowiada odwołaniu do zestawu.The located assembly's manifest definition does not match the assembly reference. (Wyjątek od HRESULT: 0x80131040)(Exception from HRESULT: 0x80131040) Zazwyczaj oznacza to, że uruchamiasz aplikację .NET 4 bez pliku redirect. config.This typically means that you are running a .NET 4 application without the Redirect.config file. Należy skopiować plik redirect. config do tej samej lokalizacji, w której znajduje się plik zmigrować. exe i zmienić jego nazwę na Migruj. exe. config.You need to copy the Redirect.config to the same location as migrate.exe and rename it to 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.Unhandled Exception: System.IO.FileLoadException: Could not load file or assembly 'EntityFramework, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' or one of its dependencies. Zlokalizowana definicja manifestu zestawu nie odpowiada odwołaniu do zestawu.The located assembly's manifest definition does not match the assembly reference. (Wyjątek od HRESULT: 0x80131040)(Exception from HRESULT: 0x80131040) Ten wyjątek oznacza, że uruchomiono aplikację .NET 4,5 z przekierowanym. config skopiowanym do lokalizacji migracji. exe.This exception means that you are running a .NET 4.5 application with the Redirect.config copied to the migrate.exe location. Jeśli aplikacja jest platformą .NET 4,5, nie trzeba mieć pliku konfiguracji z przekierowaniami wewnątrz.If your app is .NET 4.5 then you do not need to have the config file with the redirects inside. Usuń plik zmigrować. exe. config.Delete the migrate.exe.config file.
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.ERROR: Unable to update database to match the current model because there are pending changes and automatic migration is disabled. Napisz oczekujące zmiany modelu do migracji opartej na kodzie lub Włącz automatyczną migrację.Either write the pending model changes to a code-based migration or enable automatic migration. Ustaw DbMigrationsConfiguration. AutomaticMigrationsEnabled na wartość true, aby umożliwić automatyczną migrację.Set DbMigrationsConfiguration.AutomaticMigrationsEnabled to true to enable automatic migration. Ten błąd występuje, jeśli uruchomiono migrację, gdy nie utworzono migracji w celu zaspokojenia zmian wprowadzonych w modelu, a baza danych nie jest zgodna z modelem.This error occurs if running migrate when you haven’t created a migration to cope with changes made to the model, and the database does not match the model. Przykładem może być dodanie właściwości do klasy modelu, a następnie uruchomienie pliku Migration. exe bez tworzenia migracji w celu uaktualnienia bazy danych.Adding a property to a model class then running migrate.exe without creating a migration to upgrade the database is an example of this.
Błąd: typ nie został rozpoznany dla elementu członkowskiego "System. Data. Entity. migrations. Design. ToolingFacade + UpdateRunner, EntityFramework, Version = 5.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089".ERROR: Type is not resolved for member '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 startowego.This error can be caused by specifying an incorrect startup directory. Musi to być lokalizacja pliku migracji. exeThis must be the location of migrate.exe
Nieobsługiwany wyjątek: System. NullReferenceException: odwołanie do obiektu nie jest ustawione na wystąpienie obiektu.Unhandled Exception: System.NullReferenceException: Object reference not set to an instance of an object.
   w System. Data. Entity. migrations. Console. program. Main (ciąg [] args)at System.Data.Entity.Migrations.Console.Program.Main(String[] args)
Może to być spowodowane nieokreśleniem wymaganego parametru dla scenariusza, którego używasz.This can be caused by not specifying a required parameter for a scenario that you are using. Na przykład określenie parametrów połączenia bez określenia nazwy dostawcy.For example specifying a connection string without specifying the provider name.
Błąd: w zestawie "ClassLibrary1" znaleziono więcej niż jeden typ konfiguracji migracji.ERROR: More than one migrations configuration type was found in the assembly 'ClassLibrary1'. Określ nazwę, która ma zostać użyta.Specify the name of the one to use. Ponieważ stanem błędu, istnieje więcej niż jedna Klasa konfiguracji w danym zestawie.As the error states, there is more than one configuration class in the given assembly. Aby określić, który z nich ma być używany, należy użyć przełącznika/configurationType.You must use the /configurationType switch to specify which to use.
Błąd: nie można załadować pliku lub zestawu "<assemblyName>" lub jednej z jego zależności.ERROR: Could not load file or assembly ‘<assemblyName>’ or one of its dependencies. Dana nazwa zestawu lub baza kodu jest nieprawidłowa.The given assembly name or codebase was invalid. (Wyjątek od HRESULT: 0x80131047)(Exception from HRESULT: 0x80131047) Może to być spowodowane nieprawidłową nazwą zestawu lub nieposiadaniemThis can be caused by specifying an assembly name incorrectly or not having
Błąd: nie można załadować pliku lub zestawu "<assemblyName>" lub jednej z jego zależności.ERROR: Could not load file or assembly ‘<assemblyName>' or one of its dependencies. Podjęto próbę załadowania programu z nieprawidłowym formatem.An attempt was made to load a program with an incorrect format. Dzieje się tak, jeśli próbujesz uruchomić plik zmigrować. exe w przypadku aplikacji x64.This happens if you are trying to run migrate.exe against an x64 application. EF 5,0 i niższych wersji będą działały tylko w architekturze x86.EF 5.0 and below will only work on x86.