EntityFramework进阶——CodeFirst数据库迁移
與視覺操作界面相比,CodeFirst機制提供了一套命令行模式的遷移工具,協助開發人員有效的進行數據庫與數據模型的同步維護操作。
新建一個控制臺項目CFMigrationsDemo,選用來自數據庫的EF設計器模式,?并向其中添加一個Product.cs類文件,如下圖所示:
public class Product {public int Id { get; set; }public string Name { get; set; } }?
Enable-Migrations :啟動此項目的遷移功能
在程序包管理器中控制臺輸入上述命令,可以看到已經啟用CodeFirst項目遷移功能,如下圖所示:
?
?Add-Migration?MigName:建立遷移文件,Add-Migration 和 MigName中間空一格,MigName為自定義名稱,表示要創建的遷移文件名稱,建議以有意義的名字來命名。
在程序包管理器控制臺輸入?Add-Migration AddProduct?以建立遷移文件,如下圖所示:
生成的遷移文件如下圖所示:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
打開遷移文件可以看到如下代碼:
public partial class AddProduct : DbMigration{public override void Up(){CreateTable("dbo.Products",c => new{Id = c.Int(nullable: false, identity: true),Name = c.String(),}).PrimaryKey(t => t.Id);}public override void Down(){DropTable("dbo.Products");}}?這是一個繼承DbMigration的類文件,CodeFirst遷移通過自動生成的Up和Down方法記錄每一次的變動內容,以支持數據庫的升級和降級。通過調用Down方法可以將數據庫恢復至此次遷移前的狀態。
?
Update-Database:更新數據庫
接下來完成第一次遷移操作,在程序包管理器控制平臺輸入上述命令:
? ? ? ? ? ? ? ? ?
可以看到遷移已經順利完成,在原來的數據庫中添加了一個Product表:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
?
結構變動遷移?
在Product.cs類中,添加一個字段Price:
public class Product{public int Id { get; set; }public string Name { get; set; }public int Price { get; set; }}重新打開程序包管理控制臺對話框,在其中鍵入Add-Migration AddProductPrice添加一個遷移文件,再執行一次Update-Database指令,界面如下圖所示:
?數據庫已經生成Price字段屬性:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
?
查看SQL?
Update-Database —Verbose:?每一次遷移是通過SQL語句來完成數據庫更新操作的,如果想要查看所使用的的SQL語句,可以加上-Verbose標志。
在Prodcut.cs類文件上增加屬性Quantity以創建可以存儲商品數量的字段:
public class Product{public int Id { get; set; }public string Name { get; set; }public int Price { get; set; }public int Quantity { get; set; }}首先執行Add-Migration AddProductQuantity命令添加遷移文件,在執行一次Update Database-Verbose命令,這個過程除了完成遷移操作外,同時會顯示執行遷移的SQL語句,如下圖所示:
指定遷移?
Update-Database -TargetMigration:MigrationName:Update-Database 和 -TargetMigration之間有空格。在執行Update—Database命令時,可以進一步指定所要遷移的版本,現在執行Update-Database -TargetMigration:AddProductQuantity,這是當前最新的版本,因此不會起作用。再執行前一個版本的遷移,執行Update-Database-TargetMigration:AddProductPrice命令,會導致降級。
? ? ? ? ? ? ? ? ?
上述過程會導致降級,執行AddProductQuantity中的Down方法刪除Quantity字段,恢復到AddProduct的狀態。?
?
?
總結
以上是生活随笔為你收集整理的EntityFramework进阶——CodeFirst数据库迁移的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 爬山法实现 八皇后问题 (Python
- 下一篇: 字符串的模式匹配--BF算法KMP算法