生成表代码首先不在应用程序运行时生成表

时间:2017-11-30 09:47:53

标签: c# entity-framework ef-code-first

我有一个网站。首先使用COde。我的add-migration命令是按照代码生成的。

public partial class StudentEntity : DbMigration
{
    public override void Up()
    {



        CreateTable(
            "dbo.Student",
            c => new
                {
                    id = c.Int( nullable: false, identity: true),
                    name = c.String(),
                })
            .PrimaryKey(t => t.id);


    }

现在我想部署我的网站,以便当我第一次在DB(SQL服务器)中生成Student表时运行站点。

现在,当我运行网站时,它不会创建任何表格。我怎样才能做到这一点?我不希望任何种子数据用

初始化

我的db上下文类

  public partial class flagen:DbContext
{
    public flagen() : base("name=cf2")
    {
    }
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {

        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
    }
    //old entity
    public virtual DbSet<flag> flags { get; set; }
    //new entity
     public virtual DbSet<Student> students { get; set; }
}

然后我尝试使用Context来创建表。它会引发错误&#34;该模型支持&#39; flagen&#39;自创建数据库以来,上下文已更改。考虑使用Code First Migrations来更新数据库&#34; 我在dbcontext类

中添加了两行
  Database.SetInitializer<flagen>(null);
        base.OnModelCreating(modelBuilder);

现在它说&#34;无效的对象名学生&#34;

任何有效的解决方案?

2 个答案:

答案 0 :(得分:0)

一种解决方案可能是定义一个初始化程序,它将数据库迁移到您添加的上一次现有迁移。因此,将创建所有表,并且也将执行配置的Seed方法 - 您可以将其用于播种数据。 通过以下示例,您的数据库将在第一次初始化数据上下文时更新为上次现有迁移(因此创建所有表)。 (var dbContext = new MyDatabaseContext()) 在我看来,比使用AutomaticMigrationsEnabled = true更清洁的方式也可以查看。 ;)

这里提到的是一个将MigrateDatabaseToLatestVersion初始化程序与定义的行为一起使用的示例。

public partial class MyDatabaseContext : DbContext
{
    public virtual DbSet<Student> students { get; set; }



    public MyDatabaseContext() : base("MyDatabaseContextConnectionString")
    {
        System.Data.Entity.Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyDatabaseContext, Migrations.Configuration>());
    }



    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        // here we want to define the entities structure
    }    
}

您可以找到有关初始化程序本身的更多信息here MSDN   - MigrateDatabaseToLatestVersion )和here实体框架教程 - 代码优先教程 - 自动迁移)是另一个示例,其中包含更多背景信息和示例。

答案 1 :(得分:0)

这个问题的答案是使用T4模板。在搜索网络后,我得到了没有人可以做到的答案。羞...

https://archive.codeplex.com/?p=t4dacfx2tsql