【问题标题】:Forcing EF 6 to create tables with model first强制 EF 6 首先使用模型创建表
【发布时间】:2014-01-06 16:46:28
【问题描述】:

目前我有一个很好的模型,我可以基于它生成一个数据库,但据我所知,这些表永远不会创建(导致各种有趣的运行时错误)。

我的理解是代码优先有三个选项会强制 EF 为我创建表:

  • DropCreateDatabaseAlways
  • CreateDatabaseIfNotExists
  • DropCreateDatabaseIfModelChanges

如果我先做事模型,如何使用这些?

另外,这是一个预期的错误,还是当我第一次选择从模型生成数据库时,这应该自动发生吗?

编辑:我试过打电话

            context.Database.Initialize(true);
            context.Database.CreateIfNotExists();

没有任何变化。

【问题讨论】:

标签: c# database entity-framework-6 ef-model-first


【解决方案1】:

这也很好 tutorial

但是,如果您在第一次访问 dbContext 时使模型良好,则应通过您可以设置的 db 策略创建 db:Database.SetInitializer() set initializer

简而言之,在您创建模型后,您需要创建从 DbContext 继承的类:

 public class CompanyContext : DbContext
{
    public CompanyContext() : base("CompanyDatabase") { }

    public DbSet<Collaborator> Collaborators { get; set; }
    public DbSet<Department> Departments { get; set; }
    public DbSet<Manager> Managers { get; set; }
}

然后当您访问此上下文时,应生成表。 您还可以使用您应该从要实施的策略继承的数据为数据库播种,请查看此链接seeding database

【讨论】:

  • 如果模型现在很好(以前不是),我如何将它更新到表格中?从模型生成数据库似乎并不能解决问题。另外,我找不到那种方法。我是否在上下文中设置它?
  • 是的,它应该做的伎俩我做了很多次你创建自己的继承自 DbContext 的类?
  • 我没有创建自己的课程。我需要这样做吗?
  • 不,它是 System.Data.Entity 中的静态方法
  • 我想了解您只有模型类?
猜你喜欢
  • 1970-01-01
  • 2013-10-07
  • 2012-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-18
相关资源
最近更新 更多