我有一个网站。首先使用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;
任何有效的解决方案?
答案 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模板。在搜索网络后,我得到了没有人可以做到的答案。羞...