开发过程当中都会遇到数据库数据结构更新的问题,怎么对数据库更新进行版本控制呢?数据库
不一样的项目对数据库版本更新控制的方式不一样,经常使用的有第三方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文件夹下新增增量变动文件,运行项目便可更新数据库,对线上数据库更新也很方便。很久没写了,新的一年也在博客园打下卡,其次是键盘进水了,写这篇博客想测试下新键盘是否好用。^_^ ^_^