2017-10-10 99 views
0

我正尝试在buildserver上执行代码第一次迁移的数据库更新。Migration.exe -connectionString参数无法在CI服务器上执行EF迁移

我读了关于从EF 6工具中使用migration.exe,并传递misc。上下文和连接设置作为migration.exe调用的参数。

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

问题是,当我指定了我的连接字符串时,如: migrate.exe Ef.Data.DLL/ConnectionString:“Data Source = myserver; Initial Catalog = MyCatalog; Integrated Security = true”/ connectionProviderName:System .Data.SqlClient /详细

然后migrate.exe将抛出和错误信息:System.InvalidOperationException:没有名为“MyContext”连接字符串可能会在应用程序配置文件

我的背景是一样的代码定义中找到: public MyContext() :base(“name = MyContext”)

所以它期望一个“MyContext”连接字符串,就像它仍然试图使用App.Config或web.config一样,但它不应该导致我将这些信息作为参数传递。

如果我尝试指定一个ConnectionStringName作为参数(-connectionStringName:MyContext)沿其他参数。我得到:错误:只能指定/ connectionStringName或/ connectionString中的一个。

所以我很困在这里。不能解决这个问题。任何想法都非常感谢。

+0

尝试添加提供者作为参数以及:'/ connectionProviderName:“System.Data.SqlClient”' –

+0

它的所有已存在并没有帮助。 –

回答

1

今天我有同样的问题。对我来说,它是通过改变我的上下文构造排序,从这个:

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

这样:

public RootContext() : this("MyContext") 

有上下文名称前面的name=价值中找到否则它会引发错误。如果仅从Visual Studio进行部署,这非常棒,因为如果字符串不匹配,它将有助于引发错误,但在尝试通过命令行在不同环境中自动执行迁移时不会太好。所以,如果你做了这个改变,在VS中运行你的迁移时要小心 - 如果你的字符串不匹配,它会继续愉快地继续,并在LocalDB中创建一个名为“MyContext”的新数据库,而不会告诉你它是什么没有!