0

我刚刚使用 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 上没有更改表的权限,请确保将脚本发送给您的系统管理员,因为它不会更改表。这是在您完成上述所有操作之后。

4

2 回答 2

0

看起来您的 db 架构已更改。

有同样的问题。但我有必须 24/7 全天候工作的生产服务器。对于这样的情况,我使用:

http://www.devart.com/dbforge/sql/datacompare/

这将帮助您比较本地数据库和生产服务器数据库中的数据。但是,如果您需要比较架构,请使用以下架构:

http://www.devart.com/dbforge/sql/schemacompare/

于 2013-08-23T13:26:22.753 回答
0

该错误意味着当您手动更新数据库时,您犯了一些错误,因此数据库中的模型无法反映您的实体。

  1. 我曾经将 web.config 文件中的连接字符串更改为我的生产数据库并运行“更新数据库”,如果您正在处理的数据库已经填充了一些您不想丢失的数据,那么最好只复制表(包括迁移表)来自本地 sql。

  2. 手动更新生产中的表是个坏主意,因为您可能会犯很多错误,然后 EF 将无法工作。

解决此问题的最佳方法是从数据库中删除所有表(如果您负担得起的话),将连接字符串从本地更改为生产(在 web.config 中)并从 Visual Studio 运行“Update-Database”命令。

如果您无法删除数据库,因为它已经填充了一些数据,请从本地手动复制实体框架创建的所有表,包括迁移表,然后使用本地数据填充迁移表。这可能会有所帮助,但我不能保证。

于 2013-08-23T13:17:02.167 回答