我刚从本地主机部署了一个带有SQL Express(不是IIS本地主机)的Web应用程序到生产环境。
Web应用程序具有控制器,模型,视图(MVC)。我对数据库表做了一些修改。每次我添加一个新字段I:
enable-migrations
add-migration addnewfieldname
update-database -verbose
所有模型都会使用新表格字段进行更新。以上内容适用于使用SQL Express的本地主机上的Web应用程序。
然后我将其发布到生产中并进行了所有迁移。同时在生产中我改变了SQL Server中数据库上的表,以获得所有新创建的字段。
现在出现了问题,生产无效。我做错了什么?它给了我错误页面。
以下是错误消息:
自创建数据库以来,支持'DefaultConnection'上下文的模型已更改。考虑使用Code First Migrations来更新数据库
所以我找到了解决方案,这太棒了!
首先,确保UserProfile类没有任何更改。确保首先在web.config中连接到生产数据库 然后运行:
Enable-Migrations
Add-Migration InitialMigrations -IgnoreChanges
**this below here is key, you need to add the new field one at a time.**
add-migration addnewfield1
update-database
add-migration addnewfield2
update-database
add-migration addnewfield3
update-database
etc.
这应生成一个空白的“InitialMigration”文件。现在,将任何所需的更改添加到UserProfile类。添加更改后,再次运行update命令:
update-database -verbose
现在将应用自动迁移,表格将随您的更改而更改。
另一个密钥,如果您没有SQL Server权限来更改表,请确保将脚本发送到sysadmin,因为它不会更改表。这是在完成上述所有操作之后。
答案 0 :(得分:0)
错误意味着当您手动更新数据库时,您犯了一些错误,因此数据库中的模型不会反映您的情况。
我曾经将web.config文件中的连接字符串更改为我的生产数据库并运行“Update-Database”,如果您正在处理的数据库已经填充了一些您不想要的数据丢失然后更好只是从本地sql复制表(包括迁移表)。
手动更新生产表是个坏主意,因为你可能会犯很多错误而且EF不会起作用。
解决此问题的最佳方法是从数据库中删除所有表(如果可以负担),将连接字符串从本地更改为生产(在web.config中)并从Visual Studio运行“Update-Database”命令。 / p>
如果您因为已填充了某些数据而无法删除数据库,请手动复制Entity Framework已创建的本地所有表(包括迁移表),然后使用本地数据填充迁移表。这可能会有所帮助,但我无法保证。
答案 1 :(得分:0)
看起来你的db模式已被更改。
有同样的问题。但我有生产服务器必须全天候工作。对于我使用的情况:
http://www.devart.com/dbforge/sql/datacompare/
这将帮助您比较本地数据库和生产服务器数据库中的数据。但是如果你需要比较架构,请使用这个: