我正在尝试在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文件夹中指定的表。
答案 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();
}