在項目中使用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。