在项目中使用Entity Framework的Code First模式,进行数据迁移时,Migration文件夹中存放的是每一次Entity的修改如何同步到数据的操作方法,每个文件中都只有Up和Down这两个方法。例如第一次数据迁移时,会创建数据表,在程序包管理控制台中输入命令:add-migration migrationname,会生成一个migrationname.cs的文件,在对应的Migration类文件的代码如下:
1 public override void Up() 2 { 3 CreateTable( 4 "dbo.FileBoxes", 5 c => new 6 { 7 Id = c.Long(nullable: false, identity: true), 8 FileNo = c.String(), 9 FileTitle = c.String(), 10 Version = c.String(), 11 FileType = c.String(), 12 BoxNo = c.String(), 13 ManageStyle = c.String(), 14 Year = c.String(), 15 Remark = c.String(), 16 }) 17 .PrimaryKey(t => t.Id); 18 19 } 20 21 public override void Down() 22 { 23 DropTable("dbo.FileBoxes"); 24 }
再在程序包管理控制台中输入命令: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。
时间: 2024-10-27 21:24:41