You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Entity Framework 6配置MigrateDatabaseToLatestVersion时迁移的执行顺序是怎样的

MigrateDatabaseToLatestVersion 迁移排序规则说明

排序逻辑

  • 配置MigrateDatabaseToLatestVersion后,EF 不会读取本地迁移文件的文件名做排序,排序的核心依据是迁移类上声明的[Migration]特性参数。
  • 执行Add-Migration(包管理器控制台)或dotnet ef migrations add命令生成迁移时,工具会自动为迁移类附加类似[Migration("20240520123456_InitDatabase")]的特性,特性的字符串参数正好是迁移文件名的前缀时间戳+迁移名称的组合,运行时会直接从程序集元数据中读取所有迁移类的该特性值,按字符串字典序排序,天然符合迁移生成的先后顺序。

关于时间戳读取的认知正误

该认知是错误的,运行时不需要读取文件系统的时间戳:

  • 文件名的时间戳在迁移生成阶段就已经同步写入到迁移类的MigrationAttribute参数中,编译后会存储在程序集元数据里,执行迁移时直接从程序集读取即可,不依赖本地源文件存在。
  • 不建议手动修改MigrationAttribute的参数,调整后可能和数据库__EFMigrationsHistory表中存储的已执行迁移ID不匹配,引发重复执行、迁移缺失等异常。

补充说明

  • 正式执行迁移前,EF会先查询目标库的__EFMigrationsHistory表,获取已经执行过的迁移ID列表,和程序集中读取到的所有迁移ID对比,未匹配到的迁移会按排序结果依次执行。
  • 如果手动删除了迁移源文件但没有清理程序集内编译的迁移类,也可能导致迁移执行逻辑异常。

内容的提问来源于stack exchange,提问作者viraptor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 20:06:05