我遇到了一个问题,我收到错误“上下文已更改,因为数据库已创建”,但是当我查看迁移历史记录表时它是最新的迁移。这是一个测试站点,所以我使用运行此命令“Update-Database -Script -SourceMigration:$ InitialDatabase”得到的sql脚本更新了数据库。我不能只删除整个数据库并重新创建它。有没有人遇到过类似的问题?目前,我正在使用EF 6.1.3。获取EF上下文已更改错误后更新站点
注:我为此使用了代码优先,所以它不是我添加的现有数据库。
我遇到了一个问题,我收到错误“上下文已更改,因为数据库已创建”,但是当我查看迁移历史记录表时它是最新的迁移。这是一个测试站点,所以我使用运行此命令“Update-Database -Script -SourceMigration:$ InitialDatabase”得到的sql脚本更新了数据库。我不能只删除整个数据库并重新创建它。有没有人遇到过类似的问题?目前,我正在使用EF 6.1.3。获取EF上下文已更改错误后更新站点
注:我为此使用了代码优先,所以它不是我添加的现有数据库。
问题是由于域名被更改而为该站点创建了一个新目录。我知道域名已经改变,但没有意识到物理目录已经改变。这是我在检查应用程序路径时发现的一个轻微变化(已删除)。所以问题是由pebkac引起的(键盘和椅子之间存在问题)。
尝试在DbContext类的构造函数中将Initializer设置为null。
像这样:
Database.SetInitializer<YourDbContext>(null);
ScottGu的博客解释了为什么发生这种情况:
http://weblogs.asp.net/scottgu/using-ef-code-first-with-an-existing-database
我使用代码优先创建了这个数据库,所以我不相信ScottGu的文章与此相关。据我所知,代码和数据库都应该使用相同的迁移,但是我得到了上面提到的错误。有些东西不同步,不知道是什么。 – Wade73
您是否尝试过使用此命令,而不是执行脚本?
更新,数据库-Force
如果启用自动迁移,这应该拿起你的代码优先的变化和部署。该力量将允许有数据的列被丢弃等。
sql服务器位于我无法从我的开发机器(我是分包商)访问的服务器上。所以我需要通过ftp上传文件,然后用rdp中的sql脚本更新数据库。 – Wade73
去看看我的答案在这里。这一定会对你有所帮助。 REDGATE的人们对这个问题有很好的工具。我希望微软也会创建一个。 http://stackoverflow.com/a/28084105/3777098 – alikuli