背景: 我已将系统从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(真) 我的系统不接受这个,它关闭了。
然后在更换__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
对我做错了什么的消息?
答案 0 :(得分:0)
在Configuration.cs文件中进行更改==>
public Configuration()
{
AutomaticMigrationsEnabled = **true**;
}