即使禁用了自动迁移,Update-Database也会尝试执行自动迁移

Dav*_*ves 17 entity-framework ef-migrations

我在使用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.
Run Code Online (Sandbox Code Playgroud)

即使我已禁用自动迁移,为什么会出现此错误?我可以通过删除显式迁移然后重新构建它(运行Add-Migration)来修复此错误.然后Update-Database运行正常并且没有提到任何关于"自动迁移..."的信息.此外,我运行Add-Migration时创建的迁移中的代码与我的队友创建的代码相同.我不明白为什么它甚至会尝试自动迁移AutomaticMigrationsEnabled = false;.

我在这里错过了什么?

Dav*_*ves 25

我不想回答我自己的问题,但我又遇到了这个问题.我的团队中的开发人员在其本地计算机上重新启用了自动迁移,然后创建了一个显式迁移,一旦我运行它就会重现此行为.

在运行显式迁移之前,实体框架将始终运行自动迁移,该迁移具有Source在其.resx文件中定义的属性,即使是 AutomaticMigrationsEnabled = false.Source如果在运行自动迁移后创建属性,则显式迁移将仅设置属性.

结果是禁用自动迁移仅意味着EF在检测到模型更改时不会自动升级您的架构 - 但如果它需要填补某些显式迁移之间的间隙,它仍可能会执行自动迁移.要避免此行为,请不要混合使用自动迁移和显式迁移.