【问题标题】:MVC C# migration from localhost to productionMVC C# 从本地主机迁移到生产环境
【发布时间】:2013-08-23 13:01:10
【问题描述】:

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

【问题讨论】:

  • 不工作不是很清楚,ARGH 是一种我从未听说过的异常 ;)
  • 嗨,Raphael,我正在拉头发(因此 argh:) 我做错了什么?拉斐尔有什么想法吗?
  • 好吧,我要问的是更多信息。仅凭“生产无法正常工作”,我们无法帮助您...所以该网站无法启动,您有异常,您没有数据,什么?
  • 网站无法正常工作,这就是正在发生的事情。它给了我一个错误页面。该站点在 localhost 上运行,但不适用于生产。显然它没有与数据库更改同步。
  • 错误页面显示什么错误信息?如果没有错误消息,请进入您的 web.config 并在 部分下,添加 (或更改该元素,如果它已经存在)。这将允许您查看实际的错误消息是什么。只需确保在解决此问题后更改/删除该设置,因为您不希望最终用户在出现错误时看到完整的堆栈跟踪。

标签: c# sql-server asp.net-mvc migration


【解决方案1】:

这个错误意味着当你手动更新数据库时,你犯了一些错误,所以你的数据库中的模型没有反映你的实体。

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

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

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

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

【讨论】:

  • 所以我该怎么办请帮忙!1
  • 你有生产环境的数据还是清库?
  • 是的,我有生产环境的数据。那么更新数据库会帮助解决这个问题吗?
  • 备份您的数据并尝试在生产环境中运行 Update-Database,您可能必须先删除您修改过的表
  • 我在这里找到了解决方案:stackoverflow.com/questions/13238203/…
【解决方案2】:

您的 db 架构似乎已更改。

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

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

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

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

【讨论】:

猜你喜欢
  • 2013-08-20
  • 2023-03-25
  • 2013-03-25
  • 1970-01-01
  • 2016-09-29
  • 2020-05-14
  • 1970-01-01
  • 1970-01-01
  • 2016-02-17
相关资源
最近更新 更多