按照 Entity Framework 代码优先方法,为什么没有创建连接字符串? (没有创建数据库)

Following Entity Framework code-first approach, why is connection string not created? (No DB created)

我有一个非常基本的模型class

class Student
{
    public int StudentID { get; set; }
    public string Ad { get; set; }
    public string Soyad { get; set; }
}

和一个非常基本的 DbContext class

class StudentContext: DbContext
{
        public StudentContext() :base("StudentDB")
        {
        }

        public DbSet<Student> Students { get; set; }
}

我尝试过控制台应用程序和 ASP.NET MVC 5 项目。都没有用:/

当我构建和 运行 应用程序时,没有创建数据库。当我检查时,我意识到尽管我什至在基本构造函数中为数据库名称传递了一个参数,但没有连接字符串插入 app.configweb.config.

Entity Framework Nuget 包在每次试用前安装,EF 在我之前的数据库优先项目中运行良好。我不知道为什么一开始我不能创建数据库 运行。我什至尝试在控制台项目的 Main() 函数中添加以下行:

StudentContext ctx = new StudentContext();
ctx.Database.CreateIfNotExists();

没用:/

替代选项是 - “Initializer”。如果您想在应用程序启动时创建数据库,请使用:

context.Database.Initialize(true);

但是在使用“Initializer”时不能使用

 ctx.Database.CreateIfNotExists();

哪里说 DbContext(string) 会在 app.config 中创建连接字符串? DbContext class 的备注部分描述了连接字符串。但是没有地方说 DbContext class 会调整 app.config.

更改 app.config 将是不受欢迎的行为。如果您希望同一个 DbContext 控制两个类似的数据库,例如将数据从一个数据库复制到另一个数据库怎么办?

要在创建 DbContext 实例后获取连接字符串,请使用:

dbContext.Database.Connection.ConnectionString;

如果您想将连接字符串写入App.Config,我建议您为其编写一个扩展函数:

static class DbContextExtensions
{
    public static void SaveConnectionString (this DbContext dbContext)
    {
         string connectionString = dbContext.Database.Connection.ConnectionString;
         SaveConnectionString(connectionString);
    }
    private static void SaveConnectionString(string connectionString)
    {   // save the string where you want it, for instance app.config
        // out of scope of this question
    }
}

用法

using(var dbConext = new StudentContext("...");
{
    dbContext.SaveConnectionString();
}