前面介绍的文章中,在简单示例中提到了通过初始化器,来更改数据库模式。但是实际生产环境中,几乎所有数据库初始化器都不现实,因为实际生产环境中的数据是很宝贵的。
这种情况下,Entity Framework中的数据库迁移,就是很有必要的功能了。前面在入门干货里有提到数据库迁移的一些常用命令,这里我们除了那么常用命令外,再介绍一下自动迁移、显式迁移、对已存在的数据库添加迁移。
首先,先把EF数据库迁移常用的脚本命令列出来:
Add-Migration新建数据库迁移脚本
Enable-Migrations给项目启动数据库迁移
Get-Help帮助命令
Update-Database[-Script] 更新数据库命令 [生成脚本参数]
Enable-Migrations命令
打开Nuget包管理控制台窗口,默认项目选择数据库上下文Context类所在的类库项目,然后在窗口中输入Enable-Migrations,最后按下Enter键即可给项目启动数据库迁移。
运行该命令后,我们会看到项目中多了一个名叫Migrations的文件夹,该文件夹里面有一个类Configuration,它指定了迁移配置,通过泛型参数将它连接到我们的数据库上下文类。
关于自动迁移
在启动了数据库迁移的项目迁移配置Configuration类的构造函数中,默认设置了AutomaticMigrationsEnabled=false,将AutomaticMigrationsEnabled修改为true,即开启了自动迁移。这样实体对象变更、数据库上下文变更之后,在运行程序时,就自动更新数据库了。
另外如果你们公司有DBA之类的管理者,需要审查我们的数据库升级脚本,自动迁移功能就派上用场了。操作步骤如下:
1)给项目开启数据库迁移功能。
2)设置自动迁移。
3)在Nuget包管理控制台窗口,输入update-database -script回车。
4)我们就能看到脚本在vs中打开。
但是自动迁移也是有弊端的,在一些简单的情景下面,自动迁移很好用,可以作为推荐使用的功能,但是当迁移变的复杂的时候,自动迁移就不好用了。这个时候我们就需要切换回显式迁移了。
关于显式迁移
显式迁移要比自动迁移灵活,虽然得敲较多的代码,但是为了更好的控制权,也是值得的。
首先,显式迁移需要确定AutomaticMigrationsEnabled属性为false,否则在两种迁移模式下,混乱就是很正常的了。
这个时候,就会用到上面的Add-Migration命令了。
Add-Migration命令
参数:迁移类名称。
运行该命令后,项目Migrations文件夹中,会生成该次迁移对应的迁移类,文件名以迁移创建的时间为前缀。
通过迁移类中的代码,我们能看出,EF自动使用 DbMigration基类帮我们实现了迁移,并重写了Up和Down方法。Up方法将数据库结构向前推进,Down方法实现回滚到之前的数据库结构。
现在使用Update-Database命令,我们会发现,数据库里除了我们更新实体引起的变动外,还会发现一张名为“__MigrationHistory”的表。该表是用来记录迁移历史的,不进行详细介绍了。
关于对已存在的数据库添加迁移
如果我们需要为一个已存在的数据库添加EF迁移,由于数据库已存在于生产环境,所以需要先让迁移知道起始的已知状态。使用命令Add-Migration -IgnoreChanges来进行处理。
执行该命令时,EF会创建一个空的迁移,假设上下文、实体定义的模型和数据库是兼容的,然后数据库模式不会发生变化,但是在__MigrationHistory表中添加一条新的数据来对应初次迁移。这之后,我们就可以切换到EF的迁移API来维护数据库模式变化了。
最后,简单提一下如果想给已创建的数据库创建实体类,可以使用Entity Framework Power Tools插件,或Entity Framework Tools工具。
插件/工具下载地址:
Entity Framework Power Tools插件
https://marketplace.visualstudio.com/items?itemName=EntityFrameworkTeam.EntityFrameworkPowerToolsBeta4
Entity Framework Tools工具
https://www.microsoft.com/en-us/download/details.aspx?id=40762
相关内容,有兴趣的同学,自行研究吧。
好了,Entity Framework的相关入门内容就介绍到这里。