EF架構(gou)~CodeFirst生(sheng)產環境的(de)Migrations
Migrations即(ji)遷(qian)移,它是EF的code first模式出現的產物,它意思是說(shuo),將代碼(ma)的變化反映到數據庫(ku)上,這種(zhong)反映有兩(liang)種(zhong)環(huan)(huan)(huan)境(jing)(jing),一是本地開(kai)(kai)發環(huan)(huan)(huan)境(jing)(jing),別一種(zhong)是服(fu)務(wu)器的生(sheng)產環(huan)(huan)(huan)境(jing)(jing),本地開(kai)(kai)發環(huan)(huan)(huan)境(jing)(jing)主要使用包管理工具的update-database即(ji)可完成數據庫(ku)的遷(qian)移(變更),而在生(sheng)產環(huan)(huan)(huan)境(jing)(jing)就顯(xian)得麻煩一些,因為你不會(hui)在生(sheng)產環(huan)(huan)(huan)境(jing)(jing)放(fang)程(cheng)序源代碼(ma)和VS開(kai)(kai)發工具,哈哈.
本地數據庫遷移請看我的這篇文章
服務器上生產環境的數據遷移
如果我們有遷移文件如下
public partial class manager : DbMigration {
/// <summary>
/// 要在升級過程(cheng)中執行的操作。
/// </summary> public override void Up() { DropForeignKey("dbo.WebDataSettings", "WebDataCtrlId", "dbo.WebDataCtrls"); DropForeignKey("dbo.WebDataSettings", "DepartmentId", "dbo.WebDepartments"); RenameColumn(table: "dbo.WebDataSettings", name: "DepartmentId", newName: "WebDepartmentsId"); RenameIndex(table: "dbo.WebDataSettings", name: "IX_DepartmentId", newName: "IX_WebDepartmentsId"); AddForeignKey("dbo.WebDataSettings", "WebDataCtrlId", "dbo.WebDataCtrls", "ID", cascadeDelete: true); AddForeignKey("dbo.WebDataSettings", "WebDepartmentsId", "dbo.WebDepartments", "ID", cascadeDelete: true); }
/// <summary>
/// 要在(zai)降級過程(cheng)中執(zhi)行(xing)的(de)操作。
/// </summary> public override void Down() { DropForeignKey("dbo.WebDataSettings", "WebDepartmentsId", "dbo.WebDepartments"); DropForeignKey("dbo.WebDataSettings", "WebDataCtrlId", "dbo.WebDataCtrls"); RenameIndex(table: "dbo.WebDataSettings", name: "IX_WebDepartmentsId", newName: "IX_DepartmentId"); RenameColumn(table: "dbo.WebDataSettings", name: "WebDepartmentsId", newName: "DepartmentId"); AddForeignKey("dbo.WebDataSettings", "DepartmentId", "dbo.WebDepartments", "ID"); AddForeignKey("dbo.WebDataSettings", "WebDataCtrlId", "dbo.WebDataCtrls", "ID"); } }
在本(ben)地VS中(zhong)執行下(xia)面命令,它將(jiang)生產遷移計劃,即SQL語句
Update-Database -Script -SourceMigration: $InitialDatabase -TargetMigration:manage
它將生(sheng)成對應的SQL腳本,我們在服(fu)務器(qi)上運行即(ji)可
冪等性
由Migration生(sheng)成的SQL腳(jiao)本是(shi)(shi)冪等的,即(ji),當你多次執(zhi)行SQL腳(jiao)本時,產生(sheng)的結果是(shi)(shi)一(yi)樣的,不對有負作用.