EF迁移需要默认ctor,但是,我不知道连接字符串?

时间:2014-06-04 07:06:35

标签: c# entity-framework entity-framework-6

EF代码首次迁移要求我在我的DbContext类上放置一个默认构造函数,这需要我知道确切的连接字符串 - 但是,我还不知道连接字符串。

我的上下文和实体驻留在MyProject.Data程序集中,没有任何关于实际数据库的信息。连接字符串位于MyProject.Executable的app.config文件中。我仍然希望将所有迁移都放入MyProject.Data项目中,因为这是他们所属的地方。

在没有默认CTOR等的情况下,有没有办法进行EF迁移?

2 个答案:

答案 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")
    {
    }
}