EF代码首次迁移要求我在我的DbContext
类上放置一个默认构造函数,这需要我知道确切的连接字符串 - 但是,我还不知道连接字符串。
我的上下文和实体驻留在MyProject.Data程序集中,没有任何关于实际数据库的信息。连接字符串位于MyProject.Executable的app.config文件中。我仍然希望将所有迁移都放入MyProject.Data项目中,因为这是他们所属的地方。
在没有默认CTOR等的情况下,有没有办法进行EF迁移?
答案 0 :(得分:0)
如果连接字符串位于主项目的app.config / Web.config中(您将构建的那个),则可以使用ConfigurationManager.ConnectionStrings来检索它们。
如果您想知道它是如何工作的,如果它在另一个项目中:这只会在运行时执行。在运行时,您的项目已编译成一个大型应用程序,并且所有内容都会侦听相同的app.config / Web.config文件(构建它时启动项目中的文件)。
从链接:
var connectionString =
ConfigurationManager.ConnectionStrings["WingtipToys"].ConnectionString;
using (var connection = new SqlConnection(connectionString))
{
//...
}
这同样适用于需要知道连接字符串的任何构造函数,例如DBContext。
根据this SO answer,您只需要传递您的连接字符串的名称,这意味着您甚至不需要 来使用ConfigurationManager
。
来自链接的答案:
After reading the docs, I have to pass the name of the connection string instead:
var db = new NerdDinners("NerdDinnerDb");
答案 1 :(得分:0)
您可以参考默认启动项目中的连接字符串名称。这就是DbContext构造函数的参数是 nameOrConnectionString 的原因。
public class MyContext : DbContext
{
public MyContext()
: base("Name=NameOfConnectionString")
{
}
}