EF Core CodeFirst數據庫自動遷移

 開發過程當中都會遇到數據庫數據結構更新的問題,怎麼對數據庫更新進行版本控制呢?數據庫

不一樣的項目對數據庫版本更新控制的方式不一樣,經常使用的有第三方Evolve,開發人員將數據庫更新腳本按照版本號的放在一塊兒,而後執行命令進行數據庫更新。在以前EF的博客中也有介紹到數據庫遷移的內容,通常在本地開發時只須要執行Add-Migration [Name]和Update-Database [Name]就能實現對本地數據庫的更新。昨天忽然想到一個問題,若是項目發佈到線上了,而線上的數據庫開發人員在本地又不能直接鏈接,還沒辦法直接使用上面的兩個命令完成數據庫的更新。因而百度了很久,網上也有好幾種解決方案。這裏我使用自動更新的方式。主要方法爲:EF core code first字段更新後執行Add-Migration [Name],而後執行MigrateAsync()方法便可完成。數據結構

1、更新實體Modelapp

在UserEntity中新增一個TestId字段用來測試。async

        [Display(Name = "TestId")]
        public int TestId { get; set; }

2、在程序包管理器控制檯輸入命令Add-Migration [Name]測試

Add-Migration userTestId

3、建立DbInitializer.csui

若是在本地開發環境,能夠直接執行Update-Database userTestId命令實現本地數據庫的更新,但這裏爲了演示自動更新,須要建立DbInitializer.cs類。spa

    public class DbInitializer
    {
        public async Task InitializeAsync(RentContext context)
        {
            //var migrations = await context.Database.GetPendingMigrationsAsync();//獲取未應用的Migrations,沒必要要,MigrateAsync方法會自動處理
            await context.Database.MigrateAsync();//根據Migrations修改/建立數據庫
        }
    }

4、Startup.cs中調用上面DbInitializer的更新方法版本控制

1.首先注入數據庫上下文code

        public void ConfigureContainer(ContainerBuilder builder)
        {
            builder.RegisterType<RentContext>();
            builder.RegisterModule<ConfigureAutofac>(); 
        }

2.而後在Configure方法添加數據庫上下文參數RentContext contextblog

 public void Configure(IApplicationBuilder app, IWebHostEnvironment env, RentContext context)

3.在Configure方法執行下面的語句進行數據庫更新

new DbInitializer().InitializeAsync(context).Wait();

5、啓動項目運行便可看到數據庫中新增的測試字段TestId

此處並未執行Update-Database userTestId命令,運行項目依然能夠看到TestId字段。

 

 6、總結

使用自動更新只須要在實體model有更新時執行Add-Migration 命令,在Migrations文件夾下新增增量變動文件,運行項目便可更新數據庫,對線上數據庫更新也很方便。很久沒寫了,新的一年也在博客園打下卡,其次是鍵盤進水了,寫這篇博客想測試下新鍵盤是否好用。^_^ ^_^

相關文章
相關標籤/搜索