EntityFrameworkCore 3.x自动迁移

问题描述:


 

EntityFramework在数据库迁移时,需手动执行add-migration,在对Migrations文件夹生成相应代码后,执行updata database,哪怕是通过db.Database.Migrate()进行代码迁移,也没改变需要生成迁移代码的过程,还是需要执行add-migration生成代码,并打包编译到你的程序中,让EFCore感知到你的迁移变化,我们能否将数据迁移的完整过程集成到项目中且无需执行任何的迁移命令呢?答案是可以的。

 

解决方案:


源码已经上传至github,源码是针对EfCore3.实现,其它版本思路类似

也可以通过nuget直接安装

Install-Package EfCore.AutoMigration

实现思路:


1、研究.Database.Migrate()源码,核心是通过数据库上下文的Model与迁移的Model进行对比,通过modelDiffer.GetDifferences(lastModel, dbContext.Model)生成差异,然后执行差异的过程。

2、自己创建一张表,用来存储上一次的dbContext.Model,然后再执行迁移时取出进行对比即可

使用方式


 

在DbContext添加实体MigrationLog,添加方式不限,表名不限,实例化DbContext的方式不限,然后再你的启动代码执行即可(一般在程序启动时执行)

 

            using (var db = new myDbContext())
            {
                db.AutoMigratorDatabase();
            }

 

posted on 2020-06-12 11:39  寒_飞  阅读(329)  评论(0编辑  收藏  举报

导航