EF 数据迁移问题总结

时间:2022-11-15 23:20:16

  在项目中使用Entity Framework的Code First模式,进行数据迁移时,Migration文件夹中存放的是每一次Entity的修改如何同步到数据的操作方法,每个文件中都只有Up和Down这两个方法。例如第一次数据迁移时,会创建数据表,在程序包管理控制台中输入命令:add-migration migrationname,会生成一个migrationname.cs的文件,在对应的Migration类文件的代码如下:

 public override void Up()
{
CreateTable(
"dbo.FileBoxes",
c => new
{
Id = c.Long(nullable: false, identity: true),
FileNo = c.String(),
FileTitle = c.String(),
Version = c.String(),
FileType = c.String(),
BoxNo = c.String(),
ManageStyle = c.String(),
Year = c.String(),
Remark = c.String(),
})
.PrimaryKey(t => t.Id); } public override void Down()
{
DropTable("dbo.FileBoxes");
}

  再在程序包管理控制台中输入命令:update-database,即可将Entity的设计同步到数据库中。

  当后期对Entity进行了修改时,再次运行 add-migration migrationname 和update-database这两个命令,即可再生成一个同步文件,并将修改更新到数据库中,例如将Entity中的Year属性改为Years,生成的同步文件代码如下:

public override void Up()
{
AddColumn("dbo.FileBoxes", "Years", c => c.String());
DropColumn("dbo.FileBoxes", "Year");
} public override void Down()
{
AddColumn("dbo.FileBoxes", "Year", c => c.String());
DropColumn("dbo.FileBoxes", "Years");
}

  这里需要注意两个问题:

  1、不能随意删除Migration文件夹内的同步文件,否则数据同步会失败。本人项目中多次进行Migration,但是将第一次创建数据表的Miragtion文件删除了,总是update-database失败,找了好半天才发现原因在这里。

  2、每次add-Migration时取的文件名不能重名。命名时可以按照当天日期拼接当天的版本号组成,例如:20160514001,20160514002。