【问题标题】:Entity Framework isn't creating databases实体框架没有创建数据库
【发布时间】:2014-03-07 11:22:26
【问题描述】:

我正在尝试在 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 文件夹中指定的表。

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • @Awais:欢迎您。不要忘记投票。干杯!
    • 很好,没想到 +1
    【解决方案2】:

    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();
    }
    

    【讨论】:

      猜你喜欢
      • 2015-09-22
      • 1970-01-01
      • 2011-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-24
      • 1970-01-01
      相关资源
      最近更新 更多