2019/05/15,EFCore 2.2.4
有兩種方式:
1.使用Migrate()方法
if (DbContext.Database.GetPendingMigrations().Any())
{
DbContext.Database.Migrate(); //執行遷移
}
Migrate()
方法使用前需在程序包管理控制檯執行Add-migration
遷移命令。之後程序每次啓動,GetPendingMigrations()
都會去檢測是否有待遷移內容,有的話,自動應用遷移。
GetPendingMigrations方法官方文檔說明
獲取在程序集中定義但尚未應用於目標數據庫的所有遷移。Migrate()方法官方文檔說明
將上下文的任何掛起的遷移應用於數據庫。 如果數據庫尚不存在,將創建它。
請注意,此API與DbContext.Database.EnsureCreated()互斥。 EnsureCreated不使用遷移來創建數據庫,因此以後無法使用遷移更新創建的數據庫。
2.使用EnsureCreated()方法
//如果成功創建了數據庫,則返回true
DbContext.Database.EnsureCreated()
此方法不需要先執行Add-migration遷移命令,如果數據庫不存在,則自動創建並返回true。
如果已經創建了數據庫後,又改動了實體Model和之前的庫存在衝突,要注意刪庫讓它自動重建,否則會報錯。
注意,使用EnsureCreated()創建的數據庫,是不帶有__EFMigrationsHistory
表的,所以不會使用該方法創建後無法再使用遷移更新已經創建的數據庫
EnsureCreated方法官方文檔說明
確保上下文的數據庫存在。 如果存在,則不採取任何措施。 如果它不存在,則創建數據庫及其所有模式。 如果數據庫存在,則不會確保它與此上下文的模型兼容。