2015-12-08 22 views
0

我遇到了一个问题,我收到错误“上下文已更改,因为数据库已创建”,但是当我查看迁移历史记录表时它是最新的迁移。这是一个测试站点,所以我使用运行此命令“Update-Database -Script -SourceMigration:$ InitialDatabase”得到的sql脚本更新了数据库。我不能只删除整个数据库并重新创建它。有没有人遇到过类似的问题?目前,我正在使用EF 6.1.3。获取EF上下文已更改错误后更新站点

注:我为此使用了代码优先,所以它不是我添加的现有数据库。

+0

去看看我的答案在这里。这一定会对你有所帮助。 REDGATE的人们对这个问题有很好的工具。我希望微软也会创建一个。 http://stackoverflow.com/a/28084105/3777098 – alikuli

回答

1

问题是由于域名被更改而为该站点创建了一个新目录。我知道域名已经改变,但没有意识到物理目录已经改变。这是我在检查应用程序路径时发现的一个轻微变化(已删除)。所以问题是由pebkac引起的(键盘和椅子之间存在问题)。

0

尝试在DbContext类的构造函数中将Initializer设置为null。

像这样:

Database.SetInitializer<YourDbContext>(null); 

ScottGu的博客解释了为什么发生这种情况:

http://weblogs.asp.net/scottgu/using-ef-code-first-with-an-existing-database

+0

我使用代码优先创建了这个数据库,所以我不相信ScottGu的文章与此相关。据我所知,代码和数据库都应该使用相同的迁移,但是我得到了上面提到的错误。有些东西不同步,不知道是什么。 – Wade73

0

您是否尝试过使用此命令,而不是执行脚本?

更新,数据库-Force

如果启用自动迁移,这应该拿起你的代码优先的变化和部署。该力量将允许有数据的列被丢弃等。

+0

sql服务器位于我无法从我的开发机器(我是分包商)访问的服务器上。所以我需要通过ftp上传文件,然后用rdp中的sql脚本更新数据库。 – Wade73