实体框架不是创建数据库

时间:2014-03-07 11:22:27

标签: asp.net-mvc entity-framework code-first

我正在尝试在VS Express中创建MVC 4应用程序(OdeToFood教程)。我在模型中创建了这个类。

但是当我运行代码时,没有创建数据库“OdeToFoodDB2”

namespace OdeToFood.Models
{
    public class OdeToFoodDB2 : DbContext
    {
        public DbSet<Resturant> Resturant { get; set; }
        public DbSet<ResturantReview> ResturantReview { get; set; }
    }
}

在web.config文件中,我有以下连接字符串

<add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=aspnet-OdeToFood-20140306003945;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnet-OdeToFood-20140306003945.mdf" providerName="System.Data.SqlClient" />

但是这个db不包含我在Model文件夹中指定的表。

2 个答案:

答案 0 :(得分:6)

使您的类名与连接字符串名称相同。它会起作用。

<add name="OdeToFoodDB2" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=aspnet-OdeToFood-20140306003945;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnet-OdeToFood-20140306003945.mdf" providerName="System.Data.SqlClient" />

<强>更新

有多种方法可以告诉DbContext如何使用数据库服务器:

1。)假设你有与上面相同的连接字符串,保持上下文类名与连接字符串名相同。

public class OdeToFoodDB2 : DbContext
 {
 }

2.)或者,您可以在上下文基础构造函数中指定连接字符串:

public class MyContext : DbContext 
{ 
    public MyContext() 
        : base("OdeToFoodDB2") 
    { 
    } 
}

3.)或者,您也可以使用“name =”形式传递给DbContext构造函数的字符串。例如:

public class MyContext : DbContext 
{ 
    public MyContext() 
        : base("name=OdeToFoodDB2") 
    { 
    } 
}

答案 1 :(得分:1)

DbContext有一个构造函数重载,它接受一个连接字符串名称。

您可能还想尝试添加新的初始化程序以使数据库保持最新

namespace OdeToFood.Models
{
    public class OdeToFoodDB2 : DbContext
        : base("DefaultConnection")
    {
        public DbSet<Resturant> Resturant { get; set; }
        public DbSet<ResturantReview> ResturantReview { get; set; }
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        var initializer = new MigrateDatabaseToLatestVersion<OdeToFoodDB2, Configuration>()
        Database.SetInitializer(initializer);
        base.OnModelCreating();
}