EF-CodeFirst-数据迁移

数据迁移

之前说到Code-First中有不同的数据库初始化策略,如CreateDatabaseIfNotExists,DropCreateDatabaseIfModelChanges和DropCreateDatabaseAlways。但是,这些策略存在一些问题,例如,数据库中已经有数据(种子数据除外)或现有的存储过程,触发器等。这些策略用于删除整个数据库并重新创建它,因此将丢失数据和其他数据库对象。

EF引入了一种迁移工具,可在模型更改时自动更新数据库模式,而不会丢失任何现有数据或其他数据库对象。它使用一个名为MigrateDatabaseToLatestVersion的新数据库初始化程序

有两种迁移方式:

  1. 自动迁移
  2. 基于代码的迁移

自动迁移

自动迁移可以通过enable-migrations在软件包管理器控制台中执行命令来实现。打开包管理器控制台,然后运行enable-migrations –EnableAutomaticMigration:$true命令(确保默认项目是上下文类所在的项目)。一旦命令成功运行,它将创建一个Configuration从项目DbMigrationConfiguration中的Migration文件夹派生的内部密封类


因为将数据上下文类放到了EntityFramework.Print项目中,故报这个错误;调整一下

Configuration类的构造函数中,AutomaticMigrationsEnabled设置为true。启用自动迁移,下一步是将上下文类中的数据库初始化程序设置为MigrateDatabaseToLatestVersion,如下所示。

删除数据库重新运行,第一次:

修改域模型,并重新添加新数据

Dept表已经根据域模型自动更新了,Person表中原先的数据也没有丢失

基于代码的迁移

基于代码的迁移提供了对迁移的更多控制,并允许配置其他内容,例如设置列的默认值,配置计算列等。为了使用基于代码的迁移,需要在Visual Studio的包管理器控制台中执行以下命令:

  • Enable-Migrations: 创建Configuration类启用项目中的迁移.
  • Add-Migration: 使用Up()和Down()方法根据指定的名称创建新的迁移类.
  • Update-Database:执行由该Add-Migration命令创建的上一个迁移文件,并将更改应用于数据库模式。

和自动迁移区别AutomaticMigrationsEnabled=false;

使用Add-Migration带有迁移类名称的命令创建迁移类,如下所示。

图中Up()方法包含用于创建数据库对象的Down()代码,该方法包含用于删除或删除数据库对象的代码。您也可以编写自己的自定义代码以进行其他配置。这比自动迁移更有优势。

使用add-migration命令创建迁移文件后,必须更新数据库。执行Update-Database命令来创建或修改数据库模式。使用该–verbose选项查看要应用于目标数据库的SQL语句。

数据库已经被更新

回滚迁移

假设想要将数据库模式回滚到之前的任何状态,那么可以update-database使用–TargetMigration参数执行命令,使其返回到想要回滚的点。例如,假设有许多迁移应用于上面的EntityFramework.Base数据库,但您想要回滚到第一个迁移。然后执行以下命令。

update-database -TargetMigration:Base-v1

种子数据

可以在数据库初始化过程中将数据插入数据库表中。比如在数据初始化时给应用程序提供一些测试数据

<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">

原文地址:https://www.cnblogs.com/GnailGnepGnaw/p/9167488.html