Utilisation de migrate.exe

Les migrations Code First peuvent être utilisées pour mettre à jour une base de données dans Visual Studio, mais peuvent également être exécutées via l’outil de ligne de commande migrate.exe. Cette page donne un aperçu de l’utilisation de migrate.exe pour exécuter des migrations sur une base de données.

Remarque

Cet article part du principe que vous savez comment utiliser les migrations Code First dans des scénarios de base. Si ce n’est pas le cas, vous devez lire Migrations Code First avant de continuer.

Copier migrate.exe

Quand vous installez Entity Framework en utilisant NuGet, migrate.exe se trouve dans le dossier tools du package téléchargé. Dans <dossier du projet>\packages\EntityFramework.<version>\tools

Dès que vous avez migrate.exe, vous devez le copier à l’emplacement de l’assembly qui contient vos migrations.

Si votre application cible .NET 4 et non 4.5, vous devez copier Redirect.config dans le même emplacement et le renommer en migrate.exe.config. De cette façon, migrate.exe obtient les redirections de liaison appropriées pour localiser l’assembly Entity Framework.

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

Remarque

migrate.exe ne prend pas en charge les assemblys x64.

Une fois que vous avez déplacé migrate.exe dans le dossier approprié, vous pouvez l’utiliser pour exécuter des migrations sur la base de données. L’utilitaire peut seulement exécuter des migrations. Il ne peut pas générer de migrations ni créer un script SQL.

Consultez les options

Migrate.exe /?

La page ci-dessus est la page d’aide associée à cet utilitaire. Notez que vous devez avoir EntityFramework.dll dans le même emplacement que celui où vous exécutez migrate.exe pour que ça fonctionne.

Migrer vers la dernière migration

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

Quand vous exécutez migrate.exe, le seul paramètre obligatoire est l’assembly, qui est celui qui contient les migrations que vous essayez d’exécuter, mais il utilise tous les paramètres basés sur la convention si vous ne spécifiez pas le fichier de configuration.

Migrer vers une migration spécifique

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

Si vous voulez exécuter des migrations jusqu’à une migration spécifique, vous pouvez spécifier le nom de la migration. Cette opération exécute toutes les migrations précédentes nécessaires jusqu’à la migration spécifiée.

Spécifier le répertoire de travail

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

Si votre assembly a des dépendances ou lit des fichiers relatifs au répertoire de travail, vous devez définir startupDirectory.

Spécifier la configuration de migration à utiliser

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

Si vous avez plusieurs classes de configuration de migration, parce que les classes héritent de DbMigrationConfiguration, vous devez spécifier ce qui doit être utilisé pour cette exécution. Vous le spécifiez en fournissant le deuxième paramètre facultatif sans commutateur comme ci-dessus.

Fournir la chaîne de connexion

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

Si vous voulez spécifier une chaîne de connexion sur la ligne de commande, vous devez également fournir le nom du fournisseur. Si vous ne spécifiez pas le nom du fournisseur, une exception est générée.

Problèmes courants

Message d’erreur Solution
Exception non prise en charge : System.IO.FileLoadException : Impossible de charger le fichier ou l’assembly 'EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' ni aucune de ses dépendances. La définition de manifeste de l'assembly trouvé ne correspond pas à la référence de l'assembly. (Exception de HRESULT : 0x80131040) Cela signifie généralement que vous exécutez une application .NET 4 sans le fichier Redirect.config. Vous devez copier Redirect.config dans le même emplacement que migrate.exe et le renommer en migrate.exe.config.
Exception non prise en charge : System.IO.FileLoadException : Impossible de charger le fichier ou l’assembly 'EntityFramework, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' ni aucune de ses dépendances. La définition de manifeste de l'assembly trouvé ne correspond pas à la référence de l'assembly. (Exception de HRESULT : 0x80131040) Cette exception signifie que vous exécutez une application .NET 4.5 avec Redirect.config copié dans l’emplacement de migrate.exe. Si votre application est .NET 4.5, vous n’avez pas besoin du fichier de configuration avec les redirections. Supprimez le fichier migrate.exe.config.
ERREUR : Impossible de mettre à jour la base de données pour qu’elle corresponde au modèle actuel, car il y a des changements en attente et la migration automatique est désactivée. Écrivez les changements de modèle en attente dans une migration basée sur le code ou activez la migration automatique. Définissez DbMigrationsConfiguration.AutomaticMigrationsEnabled sur true pour activer la migration automatique. Cette erreur se produit si vous exécutez la migration, mais que vous n’avez pas créé de migration pour gérer les changements du modèle et que la base de données ne correspond pas au modèle. L’ajout d’une propriété à une classe de modèle, puis l’exécution de migrate.exe sans créer de migration pour mettre à niveau la base de données en est un exemple.
ERREUR : Le type n’est pas résolu pour le membre 'System.Data.Entity.Migrations.Design.ToolingFacade+UpdateRunner,EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'. C’est peut-être parce que vous avez spécifié un répertoire de démarrage incorrect. Il doit s’agir de l’emplacement de migrate.exe
Exception non prise en charge : System.NullReferenceException : Référence d’objet non définie sur l’instance d’un objet.
   sur System.Data.Entity.Migrations.Console.Program.Main(String[] args)
C’est peut-être parce que vous n’avez pas spécifié un paramètre demandé pour un scénario que vous utilisez. Par exemple, vous avez spécifié une chaîne de connexion sans spécifier le nom du fournisseur.
ERREUR : Plusieurs types de configuration de migrations ont été trouvés dans l’assembly 'ClassLibrary1'. Spécifiez le nom de celui à utiliser. Comme l’indique l’erreur, il existe plusieurs classes de configuration dans l’assembly donné. Vous devez utiliser le commutateur /configurationType pour spécifier laquelle utiliser.
ERREUR : Impossible de charger le fichier ou l’assembly '<assemblyName>' ou une de ses dépendances. Le nom ou le codebase de l'assembly donné n'est pas valide. (Exception de HRESULT : 0x80131047) C’est peut-être parce que vous avez spécifié un nom d’assembly incorrect ou aucun nom
ERREUR : Impossible de charger le fichier ou l’assembly '<assemblyName>' ou une de ses dépendances. Tentative de chargement d’un programme au format incorrect. Cela se produit si vous essayez d’exécuter migrate.exe sur une application x64. EF 5.0 et les versions antérieures fonctionnent uniquement sur x86.