jsl*_*tts 22 .net connection-string entity-framework-4 ef-migrations
我们最近切换到Entity Framework数据迁移,我正在为我们的MVC应用程序开发一些构建自动化脚本.如果我有一个指向它的Web.config,我可以使用4.3中的migrate.exe工具从我们的构建服务器成功运行迁移.该命令看起来像:
ProjectName\packages\EntityFramework.4.3.1\tools\migrate.exe MyAssembly
/startupdirectory:ProjectName\bin\Debug
/startupconfigurationfile:ProjectName\Web.config
/verbose
Run Code Online (Sandbox Code Playgroud)
但是,出于各种原因,我想避免使用Web.config并在迁移时传递正确的连接字符串:
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
Run Code Online (Sandbox Code Playgroud)
这不起作用.更糟糕的是,它使用NullReferenceException崩溃migrate.exe.连接字符串与我们在Web.config中使用的字符串相同.
以前遇到过这个人吗?我的连接字符串格式错了吗?错误?
jsl*_*tts 24
好的,我们想通了.在没有Web.config的情况下运行时,还必须传入connectionProviderName参数:
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
Run Code Online (Sandbox Code Playgroud)
我已经确认这是有效的.
ang*_*sen 12
我还没有找到一个实际工作的解决方案,而无需指定web/app.config文件.见下文.
但是,如果您可以接受提供web/app.config并将连接字符串覆盖为命令行参数,则以下内容适用于Entity Framework 5.0 nuget和.NET 4.5.应该也适用于带有记录的变通方法的 .NET 4.0 .
示例文件夹结构:
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 Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
解决方案结束.
省略配置文件:
如果试图省略配置文件,无论我尝试什么,我总是得到以下异常.我没有尝试EF 4.3,所以我怀疑4.3和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.
Run Code Online (Sandbox Code Playgroud)