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 lo haces, entonces deberás leer Code First Migrations antes de continuar.

Copiar migrate.exe

Al instalar Entity Framework mediante nuGet migrate.exe estará dentro de la carpeta tools del paquete descargado. En <la carpeta> del proyecto\packages\EntityFramework.<version>\tools

Una vez que tenga migrate.exe, deberá copiarlo en la ubicación del ensamblado que contiene sus 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 migrate.exe.config. Esto es para que migrate.exe obtenga los redireccionamientos de enlace correctos para poder localizar el ensamblado de Entity Framework.

.NET 4.5 .NET 4.0
Archivos de .NET 4.5 Archivos de .NET 4.0

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 la EntityFramework.dll en la misma ubicación en la que se ejecuta migrate.exe para que esto funcione.

Migre a la última versión disponible

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

Cuando se ejecuta 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 convención si no especifica el archivo de configuración.

Migración 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.

Especificación de 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 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 comunes

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) Normalmente, esto significa que está ejecutando una aplicación de .NET 4 sin el archivo Redirect.config. Debe copiar el Redirect.config en la misma ubicación que migrate.exe y cambiar su 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 encontrado no coincide con la referencia del ensamblado. (Excepción de HRESULT: 0x80131040) Esta excepción significa que está ejecutando una aplicación de .NET 4.5 con el Redirect.config copiado en la ubicación de 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 true 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 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. 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.
   at 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 a utilizar. 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 tener la configuración apropiada.
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 intenta ejecutar migrate.exe en una aplicación x64. EF 5.0 y versiones posteriores solo funcionarán en x86.