我在visual studio 2012下有一个MVC4 Web api项目,我想首先使用EF 6.0.2代码创建和管理数据库。实际上,该解决方案需要四个项目,即
每个提到的项目都包含一个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代码第一种方法的文章和样本,但遗憾的是无法解决这个不好的问题!
如果有人能帮助我,我将不胜感激。
答案 0 :(得分:9)
实体框架代码首先不会创建您的数据库,直到您尝试访问它,因此运行您的项目并尝试获取或插入一些记录到您的数据库。
另一个有用的提示是,如果你更改你的模型EF默认会抛出一个exeption,你将不得不删除当前的数据库,以便EF可以创建一个新的。
或者我建议您更改默认行为this way