Quel est le format correct pour exécuter Entity Framework migrate?outil exe sans Web / App.config?

nous sommes récemment passés à la migration de données de cadre D'Entity et je travaille sur quelques scripts d'automatisation de construction pour notre application MVC. Je peux exécuter avec succès les migrations depuis notre serveur de compilation en utilisant le migrate.exe outil en 4.3 si j'ai un Web.config pour le point. la commande ressemble à quelque chose comme:

ProjectNamepackagesEntityFramework.4.3.1toolsmigrate.exe MyAssembly
    /startupdirectory:ProjectNamebinDebug 
    /startupconfigurationfile:ProjectNameWeb.config 
    /verbose

Cependant, pour diverses raisons, je voudrais éviter d'utiliser le Web.config et il suffit de passer dans la chaîne de connexion approprié à le temps de la migration:

ProjectNamepackagesEntityFramework.4.3.1toolsmigrate.exe MyAssembly
    /startupdirectory:ProjectNamebinDebug 
    /connectionString:"Data Source=awesomeserver;Initial Catalog=awesomedatabase;User Id=funkyuser;Password=crazypassword" 
    /verbose

Cela ne fonctionne pas. Pire, les accidents migrent.exe avec une exception NullReferenceException. La chaîne de connexion est identique à celle que nous utilisons dans notre Web.config.

Quelqu'un a déjà vu ça? Est-ce que mon format de chaîne de connexion est erroné? Bug?

21
demandé sur jslatts 0000-00-00 00:00:00

2 réponses

Ok, on a compris. Lors de la course sans le Web.config, le paramètre connectionProviderName doit aussi être passé dans:

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

j'ai confirmé que cela fonctionne.

24
répondu jslatts 2012-03-15 03:59:42

je dois encore trouver une solution qui fonctionne réellement sans spécifier le web/app.fichier de configuration. Voir ci-dessous.

cependant, si vous pouvez accepter de fournir un web/app.configuration et suppression de la chaîne de connexion en tant que paramètres de ligne de commande, puis ce qui suit fonctionne avec Entity Framework 5.0 nuget et .NET 4.5. Devrait également fonctionner pour .NET 4.0 avec le documented workarounds .

exemple de structure de dossier:

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.chauve-souris:

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

la Fin de la solution.


omettant le fichier de configuration:

si j'ai essayé d'omettre le fichier de configuration, j'ai toujours eu l'exception suivante, peu importe ce que j'ai essayé. Je n'ai pas essayé L'EF 4.3, donc je pense que le comportement a changé entre 4.3 et 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.
12
répondu angularsen 2013-01-03 12:17:31