背景:我已将系统从 Entity Framework 4.3.1 升级到 5,并从 VS 2010 移动到 VS 2012。我还从 MVC3 升级到 MVC4。我首先使用 EF 迁移代码。
所有这一切都在我的机器上完美运行,因此我尝试使用新代码升级我的测试服务器。
首先,我在服务器上安装了 .Net 4.5,没有发生任何事故(包括所有后续的 Windows 更新)。然后我验证了系统继续在升级后的服务器上运行,确实如此。
然后我在 VS2012 中使用新的“发布...”向导构建了一个部署包。在这里,我决定不选中名为“执行代码优先迁移(在应用程序启动时运行)”的复选框,因为我想在安装后直接通过我自己对 migrate.exe 的显式调用来执行此操作。
现在,我尝试升级测试系统。部署工作没有问题,但是当我尝试运行对 migrate.exe 的调用时,我首先收到消息:
“没有挂起的基于代码的迁移。” 然后出现一个大红色文本块,说明:
“错误:无法更新数据库以匹配当前模型,因为存在挂起的更改并且自动迁移已禁用。将挂起的模型更改写入基于代码的迁移或启用自动迁移。将 DbMigrationsConfiguration.AutomaticMigrationsEnabled 设置为 true 以启用自动迁移。”
当我尝试使用系统时,这个验证数据库有效性的调用返回 false: context.Database.CompatibleWithModel(true) 这不被我的系统接受,它会关闭。
然后,在替换 __MigratHistory 中的 CreatedOn 列后,我恢复到以前的包,系统再次像魅力一样工作。下面是我用来恢复的sql sript...
alter table dbo.__MigrationHistory
add CreatedOn datetime null
go
Update s
Set s.CreatedOn = CAST(SUBSTRING(s.MigrationId, 1, 8) as datetime) + CAST(SUBSTRING(s.MigrationId, 9, 2) + ':' + SUBSTRING(s.MigrationId, 11, 2) as time),
s.ProductVersion = '4.3.1'
from dbo.__MigrationHistory s
关于我做错了什么的任何建议?