我在一个使用 EF5 的 4 名开发人员团队中工作,每个人都在自己的本地数据库上工作。到目前为止,我们一直在使用自动迁移,但我们已经接近需要发布到生产环境的时间点,因此我们禁用了自动迁移并开始添加基于代码的显式迁移。
问题是:我运行了 Update-Database
开发人员创建新的显式迁移后的命令,我收到以下错误:
Applying code-based migrations: [201209080142319_CreatedDate.LastModifiedDate.Additions].
Applying code-based migration: 201209080142319_CreatedDate.LastModifiedDate.Additions.
Applying automatic migration: 201209080142319_CreatedDate.LastModifiedDate.Additions_AutomaticMigration.
Automatic migration was not applied because it would result in data loss.
即使我禁用了自动迁移,为什么还会出现此错误?我可以通过删除显式迁移然后重新搭建它(运行
Add-Migration
)来修复此错误。然后Update-Database
运行良好,没有提及任何关于“自动迁移...”的内容。此外,我在运行 Add-Migration 时创建的迁移代码与我的队友创建的代码相同。我不明白为什么它会尝试自动迁移,因为 AutomaticMigrationsEnabled = false;
.我在这里想念什么?
最佳答案
我讨厌回答自己的问题,但我又遇到了这个问题。我团队中的一位开发人员在他们的本地机器上重新启用了自动迁移,然后创建了一个显式迁移,它在我运行它后立即重现了这种行为。
Entity Framework 将总是 在运行具有 Source
的显式迁移之前运行自动迁移.resx
中定义的属性文件,即使 AutomaticMigrationsEnabled = false
.显式迁移将只有 Source
如果它是在运行自动迁移后创建的,则设置属性。
结果是禁用自动迁移仅意味着 EF 在检测到模型更改时不会自动升级您的架构 - 但如果它需要填补某些显式迁移之间的空白,它可能仍会执行自动迁移。为避免此行为,请勿混合使用自动迁移和显式迁移。
关于entity-framework - 即使禁用了自动迁移,Update-Database 也会尝试进行自动迁移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12341470/