¿Cuál es el formato correcto para la herramienta Migrate.EXE de la creación de entidades en ejecución sin una web / app.config?

StackOverflow https://stackoverflow.com//questions/9705241

Pregunta

Recientemente cambiamos a las migraciones de datos marco de entidades y estoy trabajando en algunos scripts de automatización de compilación para nuestra aplicación de MVC.Puedo ejecutar con éxito las migraciones de nuestro servidor de compilación utilizando la herramienta Migrate.exe en 4.3 si tengo una web.config para que lo apunte. El comando se ve como:

ProjectName\packages\EntityFramework.4.3.1\tools\migrate.exe MyAssembly
    /startupdirectory:ProjectName\bin\Debug 
    /startupconfigurationfile:ProjectName\Web.config 
    /verbose

Sin embargo, por varias razones, me gustaría evitar el uso de la web.config y simplemente pasar en la cadena de conexión correcta en el momento de la migración:

ProjectName\packages\EntityFramework.4.3.1\tools\migrate.exe MyAssembly
    /startupdirectory:ProjectName\bin\Debug 
    /connectionString:"Data Source=awesomeserver;Initial Catalog=awesomedatabase;User Id=funkyuser;Password=crazypassword" 
    /verbose

Esto no funciona.Peor aún, se estrella migrate.exe con una nullReferenceException.La cadena de conexión es idéntica a la que usamos en nuestro web.config.

¿Alguien se encontró con esto antes?¿Se equivoca mi formato de cadena de conexión?Error?

¿Fue útil?

Solución

OK, lo pensamos.Cuando se ejecuta sin la web.config, el parámetro ConnectionPROVIDERNAME también debe pasarse en:

ProjectName\packages\EntityFramework.4.3.1\tools\migrate.exe MyAssembly
    /startupdirectory:ProjectName\bin\Debug 
    /connectionProviderName:"System.Data.SqlClient"
    /connectionString:"Data Source=awesomeserver;Initial Catalog=awesomedatabase;User Id=funkyuser;Password=crazypassword" 
    /verbose

He confirmado que esto funciona.

Otros consejos

Aún no he encontrado una solución que realmente funcione sin especificar el archivo web / app.config.Vea abajo.

Sin embargo, si puede aceptar proporcionar una web / app.config y anular la cadena de conexión como parámetros de línea de comandos, entonces los siguientes funcionan con la entidad Marco 5.0 Nuget y .NET 4.5.También debe funcionar para .NET 4.0 con la soluciones de trabajo documentadas .

Estructura de carpeta de ejemplo:

trunk\MySolution.sln
trunk\run_migration.bat

trunk\MyMvc4App\MyMvc4App.csproj 
trunk\MyMvc4App\web.config

trunk\MyMvc4App\bin\MyMvc4App.dll
trunk\MyMvc4App\bin\EntityFramework.dll

trunk\packages\EntityFramework.5.0.0\tools\migrate.exe

run_migration.bat:

SET AssemblyName=MyMvc4App
SET StartUpDirectory=MyMvc4App\bin\
SET ConnectionString=Server=tcp:XXXX.database.windows.net,1433;Database=XXXX;User ID=XXXX;Password=XXXX;Trusted_Connection=False;Encrypt=True;Connection Timeout=30;MultipleActiveResultSets=True
SET ConnectionStringProvider=System.Data.SqlClient
SET ConfigFilePath=%CD%\MyMvc4App\web.config
SET MigrateExe=packages\EntityFramework.5.0.0\tools\migrate.exe

%MigrateExe% %AssemblyName%.dll /startUpDirectory:%StartUpDirectory% /startUpConfigurationFile:"%ConfigFilePath%" /connectionProviderName:"%ConnectionStringProvider%" /connectionString:"%ConnectionString%" /verbose
pause

FIN DE SOLUCIÓN.


omitiendo el archivo de configuración:

Si trata de omitir el archivo de configuración, siempre recibí la siguiente excepción sin importar lo que intenté.No intenté EF 4.3, así que sospecho que el comportamiento cambió entre 4.3 y 5.0.

System.Data.Entity.Migrations.Design.ToolingException: Exception has been thrown by the target of an invocation.
   at System.Data.Entity.Migrations.Design.ToolingFacade.Run(BaseRunner runner)
   at System.Data.Entity.Migrations.Design.ToolingFacade.Update(String targetMigration, Boolean force)
   at System.Data.Entity.Migrations.Console.Program.Run()
   at System.Data.Entity.Migrations.Console.Program.Main(String[] args)
ERROR: Exception has been thrown by the target of an invocation.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top