实体框架代码首先不使用 VS 2012 创建表
Posted
技术标签:
【中文标题】实体框架代码首先不使用 VS 2012 创建表【英文标题】:entity framework code first not creating tables using VS 2012 【发布时间】:2014-02-20 16:46:01 【问题描述】:我在 Visual Studio 2012 下有一个 MVC4 Web api 项目,我想首先使用 EF 6.0.2 代码创建和管理数据库。实际上,解决方案需要四个项目,即,
OnlineShop.Application(用户界面) OnlineShop.Model 仅专用于 POCO 类 OnlineShop.Test 用于单元测试和 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 代码优先方法的文章和示例,但不幸的是无法处理这个糟糕的问题!
如果有人可以帮助我,我将不胜感激。
【问题讨论】:
你试过用 c# 代码访问你的数据库吗?像 db.products.tolist()?,entityframework 构建数据库,直到您尝试获取或设置一些数据 好吧..现在不只是尝试它可能会有所帮助.. 作为记录,我发布了我的答案 不,很遗憾它没有做任何改变 对我来说似乎很好,也许尝试删除你的构造函数和覆盖,然后 EF 将使用它们的默认值,并检查它是如何工作的 【参考方案1】:实体框架代码在您尝试访问它之前不会首先创建您的数据库,因此请运行您的项目并尝试获取或插入一些记录到您的数据库中。
另一个有用的提示是,如果您更改模型,EF 默认会抛出异常,您必须删除当前数据库,以便 EF 可以创建一个新数据库。
或者我建议您更改默认行为this way
【讨论】:
以上是关于实体框架代码首先不使用 VS 2012 创建表的主要内容,如果未能解决你的问题,请参考以下文章