Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MVC#从本地主机到生产的迁移_C#_Sql Server_Asp.net Mvc_Migration - Fatal编程技术网

MVC#从本地主机到生产的迁移

MVC#从本地主机到生产的迁移,c#,sql-server,asp.net-mvc,migration,C#,Sql Server,Asp.net Mvc,Migration,我刚刚将一个web应用程序从带有SQL express的本地主机(不是IIS本地主机)部署到生产环境中 web应用程序具有控制器、模型和视图(MVC)。我对数据库表做了一些修改。每次我添加一个新字段时,我: enable-migrations add-migration addnewfieldname update-database -verbose 所有模型都会使用新表字段进行更新。上述方法在本地主机上使用SQL express与我的web应用程序配合得很好 因此,我将它发布到了生产环境中,

我刚刚将一个web应用程序从带有SQL express的本地主机(不是IIS本地主机)部署到生产环境中

web应用程序具有控制器、模型和视图(MVC)。我对数据库表做了一些修改。每次我添加一个新字段时,我:

enable-migrations
add-migration addnewfieldname
update-database -verbose
所有模型都会使用新表字段进行更新。上述方法在本地主机上使用SQL express与我的web应用程序配合得很好

因此,我将它发布到了生产环境中,并进行了所有迁移。同样在生产环境中,我在SQL server中更改数据库上的表,使其具有所有新创建的字段

现在问题来了,生产不起作用了。我做错了什么?它给了我错误页面

以下是错误消息:

自创建数据库以来,支持“DefaultConnection”上下文的模型已更改。考虑使用代码第一迁移来更新数据库

更新 所以我找到了解决办法,这太神奇了

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

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

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

  • 手动更新生产上的表是个坏主意,因为您可能会犯很多错误,EF将无法工作

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


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

    看起来您的数据库模式已经更改

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

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


    不工作不是很清楚,而且ARGH是一种我从未听说过的例外;)嗨,拉斐尔,我在拉扯我的头发(因此,阿格:),那么我做错了什么?有什么想法吗,拉斐尔?我想问你的是更多的信息。只是“生产不起作用”我们帮不了你。。。所以站点没有启动,你有异常,你没有数据,什么?站点不工作,这就是正在发生的事情。它给了我一个错误页面。该站点在本地主机上工作,但在生产环境中不工作。显然,它没有与数据库更改同步。错误页面上显示了什么错误消息?如果没有错误消息,请进入web.config并在部分下添加(或更改该元素,如果它已经存在)。这将允许您查看实际的错误消息。解决此问题后,请确保更改/删除该设置,因为在出现错误时,您不希望最终用户看到完整的堆栈跟踪。因此,我该怎么办?请提供帮助!1您是否有生产环境数据或clear数据库?是的,我有生产环境数据。那么,更新数据库是否有助于解决此问题?备份数据并尝试在生产环境中运行更新数据库,您可能必须先删除修改过的表我在此处找到了解决方案:我在此处找到了解决方案: