EF Core 应用迁移

发布时间 2023-09-21 14:44:52作者: 宁静致远.

SQL 脚本迁移

添加迁移后,需要将其部署并应用到数据库。 有多种策略可用于执行此操作,其中一些更适合生产环境,而另一些更适合开发生命周期。

备注

无论部署策略是什么,都应检查生成的迁移并进行测试,然后再将其应用于生产数据库。 迁移可能会在意图是对列进行重命名时删除该列,或者在应用于数据库时因各种原因而失败。

SQL 脚本(适用于生产环境)

建议通过生成 SQL 脚本,将迁移部署到生产数据库。 此策略的优点包括:

  • 可以检查 SQL 脚本的准确性;这一点很重要,因为将架构更改应用于生产数据库是一项可能导致数据丢失的潜在危险操作。
  • 在某些情况下,可以根据生产数据库的特定需求调整这些脚本。
  • SQL 脚本可以与部署技术结合使用,甚至可以在 CI 过程中生成。
  • SQL 脚本可以提供给 DBA,并且可以单独管理和存档。

基本用法

以下命令将生成一个从空白数据库到最新迁移的 SQL 脚本:

Script-Migration

使用 From(to 隐含)

以下命令将生成一个从给定迁移到最新迁移的 SQL 脚本。

Script-Migration AddNewTables 

使用 From 和 To

以下命令将生成一个从指定 from 迁移到指定 to 迁移的 SQL 脚本。

Script-Migration AddNewTables AddAuditTable

  可以使用比 to 新的 from 来生成回退脚本。

脚本生成接受以下两个参数,以指示应生成的迁移范围:

  • from 迁移应是运行该脚本前应用到数据库的最后一个迁移。 如果未应用任何迁移,请指定 0(默认值)。
  • to 迁移是运行该脚本后应用到数据库的最后一个迁移。 它默认为项目中的最后一个迁移。

幂等 SQL 脚本

上面生成的 SQL 脚本只能用于将架构从一个迁移更改为另一个迁移;你需要适当地应用脚本,并且仅应用于处于正确迁移状态的数据库。 EF Core 还支持生成幂等脚本,此类脚本将在内部检查已经应用哪些迁移(通过迁移历史记录表),并且只应用缺少的迁移。 如果不确知应用到数据库的最后一个迁移,或者需要部署到多个可能分别处于不同迁移的数据库,此类脚本非常有用。

Script-Migration -Idempotent

命令行工具(适用于开发环境)

EF 命令行工具可用于将迁移应用到数据库。 这种方法对于迁移的本地开发和测试很有效,但不适合管理生产数据库:

  • 该工具会直接应用 SQL 命令,不给开发人员检查或修改的机会。 这在生产环境中可能会很危险。
  • .NET SDK 和 EF 工具必须安装在生产服务器上,并且需要项目的源代码。

以下命令将数据库更新为最新迁移:

Update-Database

  以下命令将数据库更新为给定迁移:

Update-Database AddNewTables

  请注意,这也可用于回滚到较早的迁移。

警告

请记下潜在的数据丢失方案。