Migration.exe -connectionString参数在CI服务器上执行EF迁移时不起作用

时间:2017-10-10 15:00:51

标签: entity-framework ef-code-first ef-migrations

我正在尝试在构建服务器上进行代码首次迁移的数据库更新。

我读过有关使用EF 6工具中的migration.exe并传递misc的信息。作为migrate.exe调用的参数的上下文和连接设置。

我希望能够直接将连接字符串,默认目录和安全性指定为参数。

问题在于,当我指定了我的连接字符串等时:

  

migrate.exe Ef.Data.DLL / ConnectionString:“Data Source = myserver; Initial Catalog = MyCatalog; Integrated Security = true”/connectionProviderName:System.Data.SqlClient / verbose

然后migrate.exe将抛出错误:

  

System.InvalidOperationException:在应用程序配置文件中找不到名为“MyContext”的连接字符串

我的上下文在代码中定义:

public MyContext(): base("name=MyContext")

所以它期望像它一样的MyContext连接字符串仍在尝试使用App.Config或web.config,但它不应该,因为我将这些信息作为参数传递。

如果我尝试在其他args中指定ConnectionStringName作为参数(-connectionStringName:MyContext)。我得到了:

  

错误:只能指定/ connectionStringName或/ connectionString中的一个。

所以我很困惑。似乎无法解决这个问题。任何想法都受到高度赞赏。

1 个答案:

答案 0 :(得分:1)

我今天遇到了同样的问题。对我来说,它是通过改变我的上下文构造函数进行排序的,从而:

public RootContext() : base("name=MyContext")

到此:

public RootContext() : this("MyContext")

在上下文名称前面加name= 强制在配置中找到的值,否则会引发错误。当您仅从Visual Studio进行部署时,这非常有用,因为如果您的字符串不匹配,它会帮助抛出错误,但在尝试从命令行自动执行不同环境中的迁移时却不会那么好。

因此,如果您进行此更改,请在VS中运行迁移时小心 - 如果您的字符串与其不匹配,请高兴地继续并在LocalDB中创建名为" MyContext&#的新数据库34;没有告诉你它做了什么!