2014-03-07 204 views
1

我想在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文件夹中指定的表格。

回答

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 MyContext : DbContext 
{ 
    public MyContext() 
     : base("OdeToFoodDB2") 
    { 
    } 
} 

3.),也可以使用形式为“名称=”传递给字符串:

public class OdeToFoodDB2 : DbContext 
{ 
} 

2.)另外,也可以在上下文基构造指定连接串DbContext构造函数。例如:

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

是它的工作...谢谢... :) – rollo

+0

@Awais:U [R欢迎。不要忘记投票。干杯! – Saket

+0

不错,没有意识到+1 – NinjaNye

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(); 
} 
相关问题