无法使用migrate.exe运行代码首次迁移

时间:2015-02-25 16:37:45

标签: c# entity-framework code-first

我正在尝试更新测试系统上的数据库。当我在visual studio中运行update-database时,事情按预期工作。

当我部署然后尝试在测试计算机上运行时:

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

我明白了:

  

在应用程序配置文件中找不到名为xxx的连接字符串

...即使web.config中有一个带有该名称的连接字符串。只有一个.config文件,我没有运行的dll的配置文件

我试图手动声明我的连接字符串:

Migrate.exe CodeFirst.dll /connectionString="Data Source=192.168...;Initial Catalog=Database;" /connectionProviderName="System.Data.SqlClient"

但由于某种原因,它仍然会出现相同的错误...它是否忽略了我传入的连接字符串并试图再次寻找一个?为什么会这样做?

但这给了我一个非常奇怪的错误:

<击>   

迁移配置类型&#34; Source = 192.168 ...不可能   在程序集CodeFirst.dll中找到   我想知道它是否与空格有关,所以我尝试更改数据源&#39;到服务器&#39;和初始目录到&#39;数据库&#39;但那并没有帮助。

编辑:固定引号

我已经看过类似的问题,但他们都是关于在视觉工作室里面跑步而且我在尝试这样做时没有任何问题。关于我能做什么的更多想法?有没有人得到这些选项中的任何一个?

2 个答案:

答案 0 :(得分:29)

最后让它与Entity framework 6.1.3一起使用。我不确定该版本是否真的重要,但我们最终下载了代码并对其进行了调试。

真正有所作为的是在所需的两条路径中使用完整路径...希望可以帮助某人!

migrate CodeFirst.dll Configuration /startUpDirectory:"C:\src\app\CodeFirst\bin\Debug" /startUpConfigurationFile:"C:\src\app\CodeFirst\bin\CodeFirst.dll.config" 

我联系了EF团队,显然EF7会更好:https://github.com/aspnet/EntityFramework/issues/2974

答案 1 :(得分:3)

我们刚开始使用此工具的人可能会发现此PowerShell脚本很有用 - 它包含一些常见用例的默认值:

Param(
    [string]$DbConnectionString,
    [string]$StartUpDirectory,
    [string]$DataModelDllName,
    [string]$StartUpConfigurationFile = "$StartUpDirectory\$DataModelDllName.config",
    [string]$ConfigurationClassName = "Configuration",
    [string]$ConnectionProviderName = "System.Data.SqlClient",
    [string]$MigrateToolPath = "$PSScriptRoot\migrate.exe"
)

& $MigrateToolPath $DataModelDllName $ConfigurationClassName /startUpConfigurationFile=$StartUpConfigurationFile /connectionString=$DbConnectionString /connectionProviderName=$ConnectionProviderName  /startUpDirectory=$StartUpDirectory