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

时间:2014-02-20 16:46:01

标签: entity-framework asp.net-mvc-4 visual-studio-2012

我在visual studio 2012下有一个MVC4 Web api项目,我想首先使用EF 6.0.2代码创建和管理数据库。实际上,该解决方案需要四个项目,即

  • OnlineShop.Application(用户界面)
  • 仅限POCO课程的OnlineShop.Model
  • OnlineShop.Test for unit tests and
  • OnlineShop.Core有UnitOfWork,GenericRepository和 DatabaseContext类

每个提到的项目都包含一个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"));
    }
}

我已经在网上浏览了这么多,发现了很多关于EF代码第一种方法的文章和样本,但遗憾的是无法解决这个不好的问题!

如果有人能帮助我,我将不胜感激。

1 个答案:

答案 0 :(得分:9)

实体框架代码首先不会创建您的数据库,直到您尝试访问它,因此运行您的项目并尝试获取或插入一些记录到您的数据库。

另一个有用的提示是,如果你更改你的模型EF默认会抛出一个exeption,你将不得不删除当前的数据库,以便EF可以创建一个新的。

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