文章出處
文章列表
Migrations即遷移,它是EF的code first模式出現的產物,它意思是說,將代碼的變化反映到數據庫上,這種反映有兩種環境,一是本地開發環境,別一種是服務器的生產環境,本地開發環境主要使用包管理工具的update-database即可完成數據庫的遷移(變更),而在生產環境就顯得麻煩一些,因為你不會在生產環境放程序源代碼和VS開發工具,哈哈.
本地數據庫遷移請看我的這篇文章
服務器上生產環境的數據遷移
如果我們有遷移文件如下
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腳本時,產生的結果是一樣的,不對有負作用.
文章列表
全站熱搜