我试图在构建服务器上进行代码优先迁移的数据库更新。
我读过有关使用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一样,但它不应该这样做,因为我将这些信息作为参数传递进来。
如果我试图将ConnectionStringName指定为参数(-connectionStringName:MyContext),则沿其他arg。我得到:
错误:只能指定一个/connectionStringName或/connectionString。
所以我被困在这里了。似乎解决不了这个问题。任何想法都会受到高度赞赏。
发布于 2017-10-26 00:25:21
我今天也有同样的问题。对我来说,它是通过更改上下文构造函数来排序的,如下所示:
public RootContext() : base("name=MyContext")对此:
public RootContext() : this("MyContext")让name=位于上下文名称的前面,强制在配置中找到值,否则会引发错误。当您只从Visual部署时,这是很好的,因为如果您的字符串不匹配,它将有助于抛出错误,但在尝试从命令行在不同环境中自动迁移时就不是那么好了。
因此,如果您做了这个更改,在VS中运行迁移时要小心--如果您的字符串不匹配,它将很高兴地继续,并在LocalDB中创建一个名为"MyContext“的新数据库,而不告诉您它是这样做的!
https://stackoverflow.com/questions/46669953
复制相似问题