migrate.exe gebruiken

Code First Migrations kan worden gebruikt om een database bij te werken vanuit Visual Studio, maar kan ook worden uitgevoerd via het opdrachtregelprogramma migrate.exe. Op deze pagina vindt u een kort overzicht van het gebruik van migrate.exe voor het uitvoeren van migraties voor een database.

Opmerking

In dit artikel wordt ervan uitgegaan dat u weet hoe u Code First Migrations gebruikt in basisscenario's. Als u dat niet doet, moet u Code First Migrations lezen voordat u doorgaat.

migrate.exe kopiëren

Wanneer u Entity Framework installeert met behulp van NuGet migrate.exe zich in de map met hulpprogramma's van het gedownloade pakket bevindt. In <projectmap>\packages\EntityFramework.<version>\tools

Zodra u migrate.exe hebt, moet u deze kopiëren naar de locatie van de assembly die uw migraties bevat.

Als uw toepassing is gericht op .NET 4 en niet op 4.5, moet u de Redirect.config ook naar de locatie kopiëren en de naam ervan wijzigenmigrate.exe.config. Dit is zo dat migrate.exe de juiste bindingsomleidingen krijgt om de Entity Framework-assembly te kunnen vinden.

.NET 4.5 .NET 4.0
.NET 4.5-bestanden .NET 4.0-bestanden

Opmerking

migrate.exe biedt geen ondersteuning voor x64-assembly's.

Nadat u migrate.exe naar de juiste map hebt verplaatst, moet u deze kunnen gebruiken om migraties uit te voeren op de database. Het enige hulpprogramma is ontworpen om migraties uit te voeren. Het kan geen migraties genereren of een SQL-script maken.

Opties weergeven

Migrate.exe /?

In het bovenstaande wordt de Help-pagina weergegeven die aan dit hulpprogramma is gekoppeld. Houd er rekening mee dat u de EntityFramework.dll op dezelfde locatie moet hebben als waarop u migrate.exe uitvoert om dit te laten werken.

Migreren naar de meest recente migratie

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

Bij het uitvoeren van migrate.exe de enige verplichte parameter is de assembly, de assembly die de migraties bevat die u probeert uit te voeren, maar alle instellingen op basis van conventies worden gebruikt als u het configuratiebestand niet opgeeft.

Overgaan naar een specifieke migratie

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

Als u migraties tot een specifieke migratie wilt uitvoeren, kunt u de naam van de migratie opgeven. Hiermee worden alle vorige migraties naar behoefte uitgevoerd totdat u bij de opgegeven migratie komt.

Werkmap opgeven

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

Als uw assembly afhankelijkheden heeft of bestanden leest in relatie tot de werkmap, moet u startupDirectory instellen.

Migratieconfiguratie opgeven die moet worden gebruikt

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

Als u meerdere migratieconfiguratieklassen hebt, klassen die overgenomen zijn van DbMigrationConfiguration, dan moet u opgeven welke gebruikt moet worden voor deze uitvoering. Dit wordt aangegeven door de optionele tweede parameter zonder een switch op te geven, zoals hierboven beschreven.

Verbindingsreeks opgeven

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

Als u een verbindingsreeks op de opdrachtregel wilt opgeven, moet u ook de providernaam opgeven. Als u de providernaam niet opgeeft, wordt er een uitzondering gegenereerd.

Veelvoorkomende problemen

Foutmelding Solution
Onverwerkte uitzondering: System.IO.FileLoadException: Kan het bestand of de assembly 'EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' of een van de afhankelijkheden niet laden. De manifestdefinitie van de gevonden assembly komt niet overeen met de assemblyreferentie. (Uitzondering van HRESULT: 0x80131040) Dit betekent meestal dat u een .NET 4-toepassing uitvoert zonder het Redirect.config-bestand. U moet de Redirect.config naar dezelfde locatie kopiëren als migrate.exe en de naam ervan wijzigen in migrate.exe.config.
Onverwerkte uitzondering: System.IO.FileLoadException: Kan bestand of assembly 'EntityFramework, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' of een van zijn afhankelijkheden niet laden. De manifestdefinitie van de gevonden assembly komt niet overeen met de assemblyreferentie. (Uitzondering van HRESULT: 0x80131040) Deze uitzondering betekent dat u een .NET 4.5-toepassing uitvoert met de Redirect.config gekopieerd naar de migrate.exe locatie. Als uw app .NET 4.5 is, hoeft u het configuratiebestand niet met de omleidingen binnen te hebben. Verwijder het migrate.exe.config bestand.
FOUT: Kan de database niet bijwerken zodat deze overeenkomt met het huidige model omdat er wijzigingen in behandeling zijn en automatische migratie is uitgeschakeld. Schrijf de wijzigingen in het in behandeling zijnde model naar een migratie op basis van code of schakel automatische migratie in. Stel DbMigrationsConfiguration.AutomaticMigrationsEnabled in op true om automatische migratie in te schakelen. Deze fout treedt op als u een migratie uitvoert wanneer u geen migratie hebt gemaakt om wijzigingen in het model aan te kunnen en de database niet overeenkomt met het model. Een eigenschap toevoegen aan een modelklasse en vervolgens migrate.exe uitvoeren zonder een migratie te maken om de database te upgraden, is een voorbeeld hiervan.
FOUT: Type is niet opgelost voor lid 'System.Data.Entity.Migrations.Design.ToolingFacade+UpdateRunner,EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'. Deze fout kan worden veroorzaakt door een onjuiste opstartmap op te geven. Dit moet de locatie van migrate.exe
Niet-verwerkte uitzondering: System.NullReferenceException: Objectverwijzing is niet ingesteld op een exemplaar van een object.
   at System.Data.Entity.Migrations.Console.Program.Main(String[] args)
Dit kan worden veroorzaakt door het niet opgeven van een vereiste parameter voor een scenario dat u gebruikt. U kunt bijvoorbeeld een verbindingsreeks opgeven zonder de naam van de provider op te geven.
FOUT: Er is meer dan één configuratietype voor migraties gevonden in de assembly 'ClassLibrary1'. Geef de naam op van de naam die u wilt gebruiken. Naarmate de fout aangeeft, is er meer dan één configuratieklasse in de opgegeven assembly. U moet de schakeloptie /configurationType gebruiken om op te geven welke te gebruiken.
FOUT: Kan bestand of assembly '<assemblyName>' of een van de bijbehorende afhankelijkheden niet laden. De opgegeven assemblynaam of codebasis is ongeldig. (Uitzondering van HRESULT: 0x80131047) Dit kan worden veroorzaakt doordat een assemblynaam onjuist wordt opgegeven of niet
FOUT: Kan bestand of assembly '<assemblyName>' of een van de bijbehorende afhankelijkheden niet laden. Er is geprobeerd een programma met een onjuiste indeling te laden. Dit gebeurt als u migrate.exe wilt uitvoeren op een x64-toepassing. EF 5.0 en lager werkt alleen op x86.