我刚刚使用 SQL express(不是 IIS 本地主机)将 Web 应用程序从本地主机部署到生产环境。
Web 应用程序具有控制器、模型、视图 (MVC)。我对数据库表进行了一些修改。每次我添加一个新字段时,我:
enable-migrations
add-migration addnewfieldname
update-database -verbose
所有模型都使用新的表字段进行更新。以上内容与我在本地主机上使用 SQL express 的 Web 应用程序配合得很好。
然后我将它与所有迁移一起发布到生产环境中。同样在生产中,我更改 SQL Server 中数据库上的表以包含所有新创建的字段。
现在问题来了,生产不工作。我做错了什么?它给了我错误页面。
这是错误消息:
自创建数据库以来,支持“DefaultConnection”上下文的模型已更改。考虑使用 Code First 迁移来更新数据库
更新
所以我找到了解决方案,这太棒了!
首先,确保 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-database -verbose
现在将应用自动迁移,并且表格将随着您的更改而更改。
另一个关键,如果您在 SQL Server 上没有更改表的权限,请确保将脚本发送给您的系统管理员,因为它不会更改表。这是在您完成上述所有操作之后。