Uso di migrate.exe
Migrazioni Code First può essere usato per aggiornare un database dall'interno di Visual Studio, ma può anche essere eseguito tramite lo strumento da riga di comando migrate.exe. Questa pagina contiene una rapida panoramica su come usare migrate.exe per eseguire migrazioni su un database.
Nota
Questo articolo presuppone che si sappia come usare Migrazioni Code First in scenari di base. In caso contrario, sarà necessario leggere Migrazioni Code First prima di continuare.
Copiare migrate.exe
Quando si installa Entity Framework usando NuGet migrate.exe si trova all'interno della cartella degli strumenti del pacchetto scaricato. Nella <cartella> del progetto\packages\EntityFramework.<version>\tools
Dopo aver eseguito migrate.exe, è necessario copiarlo nel percorso dell'assembly che contiene le migrazioni.
Se l'applicazione è destinata a .NET 4 e non alla versione 4.5, sarà necessario copiare il file Redirect.config nel percorso e rinominarlo migrate.exe.config. In questo modo migrate.exe ottiene i reindirizzamenti di binding corretti per poter individuare l'assembly Entity Framework.
.NET 4.5 | .NET 4.0 |
---|---|
Nota
migrate.exe non supporta assembly x64.
Dopo aver spostato migrate.exe nella cartella corretta, sarà possibile usarlo per eseguire le migrazioni nel database. Tutte le utilità sono progettate per eseguire migrazioni. Non può generare migrazioni o creare uno script SQL.
Visualizzare le opzioni
Migrate.exe /?
Nella pagina precedente verrà visualizzata la pagina della Guida associata a questa utilità, si noti che sarà necessario avere EntityFramework.dll nella stessa posizione in cui si esegue migrate.exe per poter funzionare.
Eseguire la migrazione alla migrazione più recente
Migrate.exe MyMvcApplication.dll /startupConfigurationFile="..\\web.config"
Quando si esegue migrate.exe, l'unico parametro obbligatorio è l'assembly, ovvero l'assembly che contiene le migrazioni che si sta tentando di eseguire, ma userà tutte le impostazioni basate sulle convenzioni se non si specifica il file di configurazione.
Eseguire la migrazione a una migrazione specifica
Migrate.exe MyApp.exe /startupConfigurationFile="MyApp.exe.config" /targetMigration="AddTitle"
Se si desidera eseguire migrazioni fino a una migrazione specifica, è possibile specificare il nome della migrazione. Verranno eseguite tutte le migrazioni precedenti in base alle esigenze fino a raggiungere la migrazione specificata.
Specificare la directory di lavoro
Migrate.exe MyApp.exe /startupConfigurationFile="MyApp.exe.config" /startupDirectory="c:\\MyApp"
Se l'assembly ha dipendenze o legge i file relativi alla directory di lavoro, sarà necessario impostare startupDirectory.
Specificare la configurazione della migrazione da usare
Migrate.exe MyAssembly CustomConfig /startupConfigurationFile="..\\web.config"
Se sono presenti più classi di configurazione della migrazione, le classi che ereditano da DbMigrationConfiguration, è necessario specificare quale deve essere usato per questa esecuzione. Questo parametro viene specificato specificando il secondo parametro facoltativo senza un'opzione come sopra.
Fornire stringa di connessione
Migrate.exe BlogDemo.dll /connectionString="Data Source=localhost;Initial Catalog=BlogDemo;Integrated Security=SSPI" /connectionProviderName="System.Data.SqlClient"
Se si desidera specificare un stringa di connessione nella riga di comando, è necessario specificare anche il nome del provider. Se non si specifica il nome del provider, verrà generata un'eccezione.
Problemi comuni
Messaggio di errore | Soluzione |
---|---|
Eccezione non gestita: System.IO.FileLoadException: Impossibile caricare il file o l'assembly 'EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' o una delle relative dipendenze. La definizione del manifesto dell'assembly individuato non corrisponde al riferimento all'assembly. (Eccezione da HRESULT: 0x80131040) | Ciò significa in genere che si esegue un'applicazione .NET 4 senza il file Redirect.config. È necessario copiare redirect.config nello stesso percorso di migrate.exe e rinominarlo in migrate.exe.config. |
Eccezione non gestita: System.IO.FileLoadException: Impossibile caricare il file o l'assembly 'EntityFramework, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' o una delle relative dipendenze. La definizione del manifesto dell'assembly individuato non corrisponde al riferimento all'assembly. (Eccezione da HRESULT: 0x80131040) | Questa eccezione significa che si esegue un'applicazione .NET 4.5 con redirect.config copiato nel percorso migrate.exe. Se l'app è .NET 4.5, non è necessario avere il file di configurazione con i reindirizzamenti all'interno. Eliminare il file migrate.exe.config. |
ERRORE: Impossibile aggiornare il database in modo che corrisponda al modello corrente perché sono presenti modifiche in sospeso e la migrazione automatica è disabilitata. Scrivere le modifiche del modello in sospeso in una migrazione basata su codice o abilitare la migrazione automatica. Impostare DbMigrationsConfiguration.AutomaticMigrationsEnabled su true per abilitare la migrazione automatica. | Questo errore si verifica se si esegue la migrazione quando non è stata creata una migrazione per gestire le modifiche apportate al modello e il database non corrisponde al modello. L'aggiunta di una proprietà a una classe modello e quindi l'esecuzione di migrate.exe senza creare una migrazione per aggiornare il database è un esempio di questo. |
ERRORE: il tipo non viene risolto per il membro 'System.Data.Entity.Migrations.Design.ToolingFacade+UpdateRunner,EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'. | Questo errore può essere causato specificando una directory di avvio non corretta. Deve essere il percorso di migrate.exe |
Eccezione non gestita: System.NullReferenceException: riferimento all'oggetto non impostato su un'istanza di un oggetto. in System.Data.Entity.Migrations.Console.Program.Main(String[] args) |
Ciò può essere causato dalla mancata specifica di un parametro obbligatorio per uno scenario in uso. Ad esempio, specificando un stringa di connessione senza specificare il nome del provider. |
ERRORE: nell'assembly 'ClassLibrary1' è stato trovato più tipi di configurazione delle migrazioni. Specificare il nome di quello da usare. | Come indica l'errore, nell'assembly specificato sono presenti più classi di configurazione. È necessario usare l'opzione /configurationType per specificare quale usare. |
ERRORE: impossibile caricare il file o l'assembly '<assemblyName>' o una delle relative dipendenze. Il nome o la codebase dell'assembly specificati non sono validi. (Eccezione da HRESULT: 0x80131047) | Ciò può essere causato specificando un nome di assembly in modo non corretto o non avendo |
ERRORE: impossibile caricare il file o l'assembly '<assemblyName>' o una delle relative dipendenze. Tentativo di caricare un programma con un formato non corretto. | Ciò si verifica se si sta tentando di eseguire migrate.exe su un'applicazione x64. EF 5.0 e versioni successive funzioneranno solo su x86. |