我正在尝试在构建服务器上进行代码首次迁移的数据库更新。
我读过有关使用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中的一个。
所以我很困惑。似乎无法解决这个问题。任何想法都受到高度赞赏。
答案 0 :(得分:1)
我今天遇到了同样的问题。对我来说,它是通过改变我的上下文构造函数进行排序的,从而:
public RootContext() : base("name=MyContext")
到此:
public RootContext() : this("MyContext")
在上下文名称前面加name=
强制在配置中找到的值,否则会引发错误。当您仅从Visual Studio进行部署时,这非常有用,因为如果您的字符串不匹配,它会帮助抛出错误,但在尝试从命令行自动执行不同环境中的迁移时却不会那么好。
因此,如果您进行此更改,请在VS中运行迁移时小心 - 如果您的字符串与其不匹配,请高兴地继续并在LocalDB中创建名为" MyContext&#的新数据库34;没有告诉你它做了什么!