4.4.1 數據庫遷移原理
?
總結一下就是:
1. 數據庫遷移命令的執行,其實就是生成在數據庫執行的腳本代碼(兩個文件:數字_遷移名.cs? ? ?數字_遷移名.Designer.cs),用于對數據庫進行定義和修飾。
2. 數據庫遷移有兩個方法 【向上】和【向下】,個人理解:其實向上就是更新,向下就是還原上一版本。
演示一下。假設先已完成環境搭建,且創建了一個新的表格T_Dogs,模式如下:
public class Dog
{public long ID { get; set; }public string Name { get; set; }
}
現在給這個數據庫增加一列,【Age】
public class Dog
{public long ID { get; set; }public string Name { get; set; }public int Age { get; set; }
}
然后 Add-Migration AddColumnAge
執行成功后觀察項目目錄,已經生成了對應的腳本文件:
然后檢查這個腳本文件會發現,文件里有兩個方法:Up:執行新增這一列的操作 Down:執行刪除這一列的操作 ,代碼如下:
public partial class AddColumnAge : Migration
{/// <inheritdoc />protected override void Up(MigrationBuilder migrationBuilder){migrationBuilder.AddColumn<int>(name: "Age",table: "T_Dogs",type: "int",nullable: false,defaultValue: 0);}/// <inheritdoc />protected override void Down(MigrationBuilder migrationBuilder){migrationBuilder.DropColumn(name: "Age",table: "T_Dogs");}
}
然后更新數據庫:update-database
更新完成后查看數據庫已完成新增這一列:
然后查看數據庫的腳步執行歷史,最后執行的就是剛才遷移時生成的腳本(20250223071051_AddColumnAge):
4.4.2 其他數據庫遷移命令
當然,數據庫遷移不光只有update-database和Add-Migration,EF Core還提供了一些其他的命令。下面介紹幾個常用的:
1.?update-database其他參數
update-database 【這里寫遷移命令時的名稱,可以將數據庫回滾或者升級到對應的版本】
2. 刪除遷移腳本Remove-migration
Remove-migration命令,刪除最后一次的遷移腳本
3. 生成遷移腳本Script-Migration
在開發環境中可以隨意使用update-database進行數據庫更改遷移,但如果要修改實際生成環境的數據庫的話需要相關人員審計才能被允許修改。
對于這種場景, EF Core中提供了Script-Migration命令來根據遷移代碼生成SQL腳本,這個腳本可以通過審計后在生產數據庫中執行。
此外,如果數據庫已經是遷移版本的狀態了,比如已經是D版本,要升級到F版本,則可以Script-Migration D F 來生成D到F的升級的腳本
4.4.3 反向工程(慎用)
楊老師說:這是一個災難及操作,別用它。哈哈哈,其實也還好,就是確實不太推薦,應為這種方式不符合“模型驅動的開發理念”。
意思就是手動維護數據庫,然后用反向工程生成實體類。
生成時用指令:
Scafflod-DBContext ‘Server=.;Database=demo1;Trusted_Connection=True;’?Microsoft.EntityFrameworkCore.SqlServer