Uso de migrate.exe

Las migraciones de Code First se pueden usar para actualizar una base de datos desde visual Studio, pero también se pueden ejecutar a través de la herramienta de línea de comandos migrate.exe. En esta página se proporciona información general rápida sobre cómo usar migrate.exe para ejecutar migraciones en una base de datos.

Nota:

En este artículo se da por supuesto que sabe cómo usar Migraciones de Code First en escenarios básicos. Si no es así, debe leer Migraciones de Code First antes de continuar.

Copiar migrate.exe

Cuando instale Entity Framework usando NuGet, migre.exe estará dentro de la carpeta de herramientas del paquete descargado. En la <carpeta del proyecto>\packages\EntityFramework.<version>\tools

Una vez que haya migrado.exe, debe copiarlo en la ubicación del ensamblado que contiene las migraciones.

Si la aplicación tiene como destino .NET 4 y no 4.5, deberá copiar el Redirect.config en la ubicación y cambiarle el nombre a migrate.exe.config. Esto es para que migrate.exe obtenga las redirecciones de enlace correctas para poder ubicar el ensamblado de Entity Framework.

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

Nota:

migrate.exe no admite ensamblados x64.

Una vez que haya movido migrate.exe a la carpeta correcta, debería poder usarlo para ejecutar migraciones en la base de datos. Toda la utilidad está diseñada para realizar es ejecutar migraciones. No puede generar migraciones ni crear un script SQL.

Ver opciones

Migrate.exe /?

En la parte anterior se mostrará la página de ayuda asociada a esta utilidad, tenga en cuenta que tendrá que tener EntityFramework.dll en la misma ubicación en la que se ejecuta migrate.exe para que funcione.

Migrar a la migración más reciente

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

Al ejecutar migrate.exe, el único parámetro obligatorio es el ensamblado, que es el ensamblado que contiene las migraciones que está intentando ejecutar, pero usará todas las opciones basadas en la convención si no especifica el archivo de configuración.

Migrar a una migración específica

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

Si desea ejecutar migraciones hasta una migración específica, puede especificar el nombre de la migración. Esto ejecutará todas las migraciones anteriores según sea necesario hasta llegar a la migración especificada.

Especificar el directorio de trabajo

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

Si el ensamblado tiene dependencias o lee archivos relativos al directorio de trabajo, deberá establecer startupDirectory.

Especifica la configuración de migración que se va a usar

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

Si tiene varias clases de configuración de migración, las clases que se heredan de DbMigrationConfiguration, debe especificar cuál se usará para esta ejecución. Esto se especifica proporcionando el segundo parámetro opcional sin un modificador como se ha indicado anteriormente.

Proporcionar cadena de conexión

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

Si desea especificar una cadena de conexión en la línea de comandos, también debe proporcionar el nombre del proveedor. Si no se especifica el nombre del proveedor, se producirá una excepción.

Problemas habituales

Mensaje de error Solución
Excepción no controlada: System.IO.FileLoadException: no se pudo cargar el archivo o ensamblado 'EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' o una de sus dependencias. La definición de manifiesto del ensamblado ubicado no coincide con la referencia del ensamblado. (Excepción de HRESULT: 0x80131040) Esto suele significar que está ejecutando una aplicación de .NET 4 sin el archivo Redirect.config. Debe copiar redirect.config en la misma ubicación que migrate.exe y cambiarle el nombre a migrate.exe.config.
Excepción no controlada: System.IO.FileLoadException: no se pudo cargar el archivo o ensamblado 'EntityFramework, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' o una de sus dependencias. La definición de manifiesto del ensamblado ubicado no coincide con la referencia del ensamblado. (Excepción de HRESULT: 0x80131040) Esta excepción significa que está ejecutando una aplicación .NET 4.5 con Redirect.config copiado en la ubicación migrate.exe. Si la aplicación es .NET 4.5, no es necesario tener el archivo de configuración con las redirecciones dentro. Elimine el archivo migrate.exe.config.
ERROR: No se puede actualizar la base de datos para que coincida con el modelo actual porque hay cambios pendientes y la migración automática está deshabilitada. Escriba los cambios del modelo pendientes en una migración basada en código o habilite la migración automática. Establezca DbMigrationsConfiguration.AutomaticMigrationsEnabled en verdadero para habilitar la migración automática. Este error se produce si se ejecuta la migración cuando no se ha creado una migración para hacer frente a los cambios realizados en el modelo y la base de datos no coincide con el modelo. Agregar una propiedad a una clase de modelo y, a continuación, ejecutar migrate.exe sin crear una migración para actualizar la base de datos es un ejemplo de esto.
ERROR: El tipo no se resuelve para el miembro 'System.Data.Entity.Migrations.Design.ToolingFacade+UpdateRunner,EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'. Este error puede deberse a la especificación de un directorio de inicio incorrecto. Esta debe ser la ubicación de migrate.exe
Excepción no controlada: System.NullReferenceException: referencia de objeto no establecida en una instancia de un objeto.
   en System.Data.Entity.Migrations.Console.Program.Main(String[] args)
Esto puede deberse a que no se especifica un parámetro necesario para un escenario que se usa. Por ejemplo, especificar una cadena de conexión sin especificar el nombre del proveedor.
ERROR: Se encontró más de un tipo de configuración de migraciones en el ensamblado "ClassLibrary1". Especifique el nombre del que se va a usar. Como indica el error, hay más de una clase de configuración en el ensamblado especificado. Debe usar el modificador /configurationType para especificar qué usar.
ERROR: No se pudo cargar el archivo o ensamblado <assemblyName ">" o una de sus dependencias. El nombre de ensamblado o el código base especificados no eran válidos. (Excepción de HRESULT: 0x80131047) Esto puede deberse a que se especifica un nombre de ensamblado incorrectamente o no tiene
ERROR: No se pudo cargar el archivo o ensamblado<assemblyName ">" o una de sus dependencias. Se ha intentado cargar un programa con un formato incorrecto. Esto sucede si está intentando ejecutar migrate.exe en una aplicación x64. EF 5.0 y versiones posteriores solo funcionarán en x86.