Použití souboru migrate.exe
Migrace Code First lze použít k aktualizaci databáze z v sadě Visual Studio, ale lze ji spustit také pomocí nástroje příkazového řádku migrate.exe. Tato stránka poskytuje rychlý přehled o tom, jak pomocí migrate.exe spouštět migrace do databáze.
Poznámka
Tento článek předpokládá, že víte, jak používat Migrace Code First v základních scénářích. Pokud ne, budete si muset před pokračováním přečíst Migrace Code First.
Kopírování migrate.exe
Při instalaci Entity Framework pomocí NuGet migrate.exe bude uvnitř složky nástrojů staženého balíčku. Ve <složce> projektu\packages\EntityFramework.<version>\tools
Jakmile máte migrate.exe, musíte jej zkopírovat do umístění sestavení, které obsahuje vaše migrace.
Pokud vaše aplikace cílí na .NET 4, a ne 4.5, budete muset zkopírovat redirect.config do umístění a přejmenovat ji migrate.exe.config. To je tak, že migrate.exe získá správné vazby přesměrování, aby bylo možné najít Entity Framework sestavení.
.NET 4.5 | .NET 4.0 |
---|---|
Poznámka
migrate.exe nepodporuje sestavení x64.
Jakmile přesunete soubor migrate.exe do správné složky, měli byste být schopni ji použít k provádění migrací do databáze. Všechny nástroje jsou navržené tak, aby prováděly migrace. Nemůže vygenerovat migrace ani vytvořit skript SQL.
Zobrazit možnosti
Migrate.exe /?
Výše uvedená zobrazí stránku nápovědy přidruženou k tomuto nástroji, všimněte si, že budete muset mít EntityFramework.dll ve stejném umístění, ve kterém používáte migrate.exe, aby to fungovalo.
Migrace na nejnovější migraci
Migrate.exe MyMvcApplication.dll /startupConfigurationFile="..\\web.config"
Při spuštění migrate.exe je jediný povinný parametr je sestavení, což je sestavení obsahující migrace, které se pokoušíte spustit, ale použije všechna nastavení založená na konvenci, pokud nezadáte konfigurační soubor.
Migrace na konkrétní migraci
Migrate.exe MyApp.exe /startupConfigurationFile="MyApp.exe.config" /targetMigration="AddTitle"
Pokud chcete spustit migrace až do konkrétní migrace, můžete zadat název migrace. Tím se spustí všechny předchozí migrace podle potřeby, dokud se nedostanete na zadanou migraci.
Zadání pracovního adresáře
Migrate.exe MyApp.exe /startupConfigurationFile="MyApp.exe.config" /startupDirectory="c:\\MyApp"
Pokud sestavení obsahuje závislosti nebo čte soubory vzhledem k pracovnímu adresáři, budete muset nastavit startupDirectory.
Určení konfigurace migrace, která se má použít
Migrate.exe MyAssembly CustomConfig /startupConfigurationFile="..\\web.config"
Pokud máte více tříd konfigurace migrace, třídy dědí z DbMigrationConfiguration, musíte určit, který se má použít pro toto spuštění. Určuje se zadáním volitelného druhého parametru bez přepínače, jak je uvedeno výše.
Poskytnout připojovací řetězec
Migrate.exe BlogDemo.dll /connectionString="Data Source=localhost;Initial Catalog=BlogDemo;Integrated Security=SSPI" /connectionProviderName="System.Data.SqlClient"
Pokud chcete zadat připojovací řetězec na příkazovém řádku, musíte zadat také název zprostředkovatele. Nezadání názvu zprostředkovatele způsobí výjimku.
Běžné problémy
Chybová zpráva | Řešení |
---|---|
Neošetřená výjimka: System.IO.FileLoadException: Nelze načíst soubor nebo sestavení EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 nebo jednu z jejích závislostí. Definice manifestu umístěného sestavení neodpovídá odkazu na sestavení. (Výjimka z HRESULT: 0x80131040) | Obvykle to znamená, že používáte aplikaci .NET 4 bez souboru Redirect.config. Musíte zkopírovat Redirect.config do stejného umístění jako migrate.exe a přejmenovat ho na migrate.exe.config. |
Neošetřená výjimka: System.IO.FileLoadException: Nelze načíst soubor nebo sestavení EntityFramework, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 nebo jednu z jejích závislostí. Definice manifestu umístěného sestavení neodpovídá odkazu na sestavení. (Výjimka z HRESULT: 0x80131040) | Tato výjimka znamená, že používáte aplikaci .NET 4.5 s zkopírovaným redirect.config do umístění migrate.exe. Pokud je vaše aplikace .NET 4.5, nemusíte mít konfigurační soubor s přesměrováními uvnitř. Odstraňte soubor migrate.exe.config. |
CHYBA: Nelze aktualizovat databázi tak, aby odpovídala aktuálnímu modelu, protože existují čekající změny a automatická migrace je zakázaná. Buď zapište čekající změny modelu do migrace založené na kódu nebo povolte automatickou migraci. Pokud chcete povolit automatickou migraci, nastavte DbMigrationsConfiguration.AutomaticMigrationsEnabled na true. | K této chybě dochází v případě, že jste migraci spustili, když jste nevytvořili migraci, která by se dokázala vypořádat se změnami modelu, a databáze neodpovídá modelu. Příkladem je přidání vlastnosti do třídy modelu a spuštění migrate.exe bez vytvoření migrace pro upgrade databáze. |
CHYBA: Typ není vyřešen pro člena System.Data.Entity.Migrations.Design.ToolingFacade+UpdateRunner,EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089. | Příčinou této chyby může být zadání nesprávného spouštěcího adresáře. Toto musí být umístění migrate.exe. |
Neošetřená výjimka: System.NullReferenceException: Odkaz na objekt není nastaven na instanci objektu. at System.Data.Entity.Migrations.Console.Program.Main(String[] args) |
Příčinou může být nezadání požadovaného parametru pro scénář, který používáte. Například zadání připojovací řetězec bez zadání názvu zprostředkovatele. |
CHYBA: V sestavení ClassLibrary1 byl nalezen více než jeden typ konfigurace migrace. Zadejte název, který se má použít. | Jak se uvádí, v daném sestavení existuje více než jedna třída konfigurace. K určení, které se má použít, musíte použít přepínač /configurationType. |
CHYBA: Nelze načíst soubor nebo sestavení AssemblyName<> nebo jednu z jejích závislostí. Zadaný název sestavení nebo základ kódu byl neplatný. (Výjimka z HRESULT: 0x80131047) | Příčinou může být nesprávné zadání názvu sestavení nebo nesprávného zadání názvu sestavení. |
CHYBA: Nelze načíst soubor nebo sestavení AssemblyName<> nebo jednu z jejích závislostí. Došlo k pokusu o načtení programu s nesprávným formátem. | K tomu dochází v případě, že se pokoušíte spustit migrate.exe pro aplikaci x64. EF 5.0 a novější budou fungovat jenom na platformě x86. |