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文件夹下新增增量变动文件,运行项目便可更新数据库,对线上数据库更新也很方便。很久没写了,新的一年也在博客园打下卡,其次是键盘进水了,写这篇博客想测试下新键盘是否好用。^_^ ^_^

相关文章
相关标签/搜索