C# 强制EF 6首先使用模型创建表

C# 强制EF 6首先使用模型创建表,c#,database,entity-framework-6,ef-model-first,C#,Database,Entity Framework 6,Ef Model First,目前我有一个很好的模型,我可以基于它生成一个数据库,但从我所知道的,这些表从未被创建过(导致各种有趣的运行时错误) 我的理解是,代码优先有三个选项,这将迫使EF为我创建表: DropCreateDatabaseAlways CreateDatabaseIfNotExists DropCreateDatabaseIfModelChanges 如果我先做模型的事情,如何使用这些 另外,这是一个预期的错误,还是当我第一次选择从模型生成数据库时,这应该是自动发生的 编辑:我试过打电话

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

我的理解是,代码优先有三个选项,这将迫使EF为我创建表:

  • DropCreateDatabaseAlways
  • CreateDatabaseIfNotExists
  • DropCreateDatabaseIfModelChanges
如果我先做模型的事情,如何使用这些

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

编辑:我试过打电话

            context.Database.Initialize(true);
            context.Database.CreateIfNotExists();
而且没有任何变化。

这也是一种好习惯

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

简而言之,创建模型后,需要创建从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; }
}
公共类公司上下文:DbContext
{
public CompanyContext():base(“CompanyDatabase”){}
公共数据库集协作器{get;set;}
公共数据库集部门{get;set;}
公共数据库集管理器{get;set;}
}
然后,当您访问此上下文时,应该生成表。
您还可以使用从要实施的策略继承的数据为数据库种子查看此链接查看此[force initialize database][1][1]:@ilayzeidman
.SetInitializer()
方法在哪里?如果模型现在(以前不是)很好,我如何将其更新到表中?从模型生成数据库似乎不起作用。而且,我找不到那种方法。我是在上下文中设置的吗?是的,它应该做到这一点。我经常这样做。你创建自己的类继承自DbContext?我没有创建自己的类。我需要这样做吗?不,这是System.Data.Entity中的静态方法我想知道您只有模型类?