2013-03-15 78 views
0

背景: 我将系统从实体框架4.3.1升级到5,并从VS 2010升级到VS 2012. 我也从MVC3升级到MVC4。 我首先使用EF迁移代码。无法将系统从EF 4.3.1升级到5

所有这些都在我的机器上完美运行,因此我尝试用新代码升级我的测试服务器。

首先,我在服务器上安装了.NET 4.5,没有发生任何事情(包括所有后续的Windows更新)。 然后,我确认系统继续在升级后的服务器上运行,它会执行此操作。

然后,我使用VS2012中的新“发布...”向导构建部署包。在这里,我决定不检查名为“Execute Code First Migrations(在应用程序启动时运行)”的复选框,因为我想在安装后直接对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

做Configuration.cs文件==>变化

public Configuration() 
    { 
     AutomaticMigrationsEnabled = **true**; 
    }