文章出處

回到目錄

Migrations即遷移,它是EF的code first模式出現的產物,它意思是說,將代碼的變化反映到數據庫上,這種反映有兩種環境,一是本地開發環境,別一種是服務器的生產環境,本地開發環境主要使用包管理工具的update-database即可完成數據庫的遷移(變更),而在生產環境就顯得麻煩一些,因為你不會在生產環境放程序源代碼和VS開發工具,哈哈.

本地數據庫遷移請看我的這篇文章

EF架構~CodeFirst數據遷移與防數據庫刪除

服務器上生產環境的數據遷移

如果我們有遷移文件如下

public partial class manager : DbMigration
    {
  /// <summary>
        /// 要在升級過程中執行的操作。
        /// </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>
        /// 要在降級過程中執行的操作。
        /// </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"); } }

在本地VS中執行下面命令,它將生產遷移計劃,即SQL語句

Update-Database -Script -SourceMigration: $InitialDatabase -TargetMigration:manage

它將生成對應的SQL腳本,我們在服務器上運行即可

冪等性

Migration生成的SQL腳本是冪等的,即,當你多次執行SQL腳本時,產生的結果是一樣的,不對有負作用.

回到目錄


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()