Entity framework 实体框架代码首先不使用VS 2012创建表

Entity framework 实体框架代码首先不使用VS 2012创建表,entity-framework,asp.net-mvc-4,visual-studio-2012,Entity Framework,Asp.net Mvc 4,Visual Studio 2012,我在visual studio 2012下有一个MVC4 Web api项目,我想首先使用EF 6.0.2代码为其创建和管理数据库。其实解决方案包括四个项目, 应用程序(用户界面) 网上商店。仅适用于POCO类的型号 联机车间。单元测试和 在线商店。核心具有工作单元、通用存储单元和 数据库上下文类 上述每个项目都包含一个app.config,它与web.config保持相同的连接 问题:运行项目(在调试模式下)后,将按照服务器资源管理器(在visual studio 2012中)上显示的方式

我在visual studio 2012下有一个MVC4 Web api项目,我想首先使用EF 6.0.2代码为其创建和管理数据库。其实解决方案包括四个项目,

  • 应用程序(用户界面)
  • 网上商店。仅适用于POCO类的型号
  • 联机车间。单元测试和
  • 在线商店。核心具有工作单元、通用存储单元和 数据库上下文类
上述每个项目都包含一个app.config,它与web.config保持相同的连接

问题:运行项目(在调试模式下)后,将按照服务器资源管理器(在visual studio 2012中)上显示的方式创建数据库。但是,它没有桌子

数据库上下文类也如下所示:

 public class DatabaseContext : DbContext
{
    public DatabaseContext() : base("OnlineShopDb")
    {
        Database.SetInitializer(new MigrateDatabaseToLatestVersion<DatabaseContext, Configuration>());
    }

    //public static void InitializeDatabase()
    //{
    //    using (var context = new DatabaseContext())
    //    {
    //        context.Database.CreateIfNotExists();
    //        Database.SetInitializer(new MigrateDatabaseToLatestVersion<DatabaseContext, Configuration>());
    //    }
    //}

    public DbSet<Person> Persons { get; set; }
    public DbSet<Customer> Customers { get; set; }
    public DbSet<User> Users { get; set; }
    public DbSet<Audit> Audits { get; set; }
    public DbSet<RoleGroup> RoleGroups { get; set; }
    public DbSet<Role> Roles { get; set; }
    public DbSet<UserInRole> UserInRoles { get; set; }
    public DbSet<Order> Orders { get; set; }
    public DbSet<OrderDetail> OrderDetails { get; set; }
    public DbSet<Product> Products { get; set; }
    public DbSet<ProductCategory> ProductCategories { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
        modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
        modelBuilder.Entity<Person>().Map<User>(c => c.Requires("Discriminator").HasValue("User"));
    }
}
公共类数据库上下文:DbContext
{
公共DatabaseContext():base(“OnlineShopDb”)
{
SetInitializer(新的MigrateDatabaseToLatestVersion());
}
//public static void InitializeDatabase()
//{
//使用(var context=new DatabaseContext())
//    {
//context.Database.CreateIfNotExists();
//SetInitializer(新的MigrateDatabaseToLatestVersion());
//    }
//}
公共DbSet Persons{get;set;}
公共数据库集客户{get;set;}
公共数据库集用户{get;set;}
公共数据库集审核{get;set;}
公共DbSet角色组{get;set;}
公共数据库集角色{get;set;}
公共DbSet UserInRoles{get;set;}
公共数据库集命令{get;set;}
公共DbSet OrderDetails{get;set;}
公共数据库集产品{get;set;}
公共数据库集ProductCategories{get;set;}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
基于模型创建(modelBuilder);
modelBuilder.Conventions.Remove();
modelBuilder.Entity().Map(c=>c.Requires(“鉴别器”).HasValue(“用户”);
}
}
我在网上浏览了很多次,找到了很多关于EF代码优先方法的文章和示例,但不幸的是,我无法处理这个糟糕的问题


如果有人能在这方面帮助我,我将不胜感激。

Entity Framework code first在您尝试访问数据库之前不会创建您的数据库,因此请运行您的项目并尝试获取或插入一些记录到您的数据库中

另一个有用的提示是,如果您更改了模型,默认情况下EF将抛出一个exeption,您必须删除当前数据库,以便EF可以装入一个新数据库


或者我建议您更改默认行为

您是否尝试使用c#代码访问数据库?与db.products.tolist()类似,entityframework构建数据库,直到您尝试获取或设置一些数据。。不只是现在就尝试可能会有帮助。对于我发布答案的记录,不幸的是没有进行任何更改。我觉得很好,也许可以尝试删除构造函数和重写,然后EF将使用默认值,并检查其工作方式