【问题标题】:Schema not updating when publish web app from Visual Studio从 Visual Studio 发布 Web 应用程序时架构未更新
【发布时间】:2017-11-21 01:51:56
【问题描述】:

我正在构建一个具有代码优先迁移的 ASP.NET MVC EF 应用程序,并使用 Azure SQL DB 在 Azure 中托管它。我第一次发布这个,它很顺利。但从那以后我的模型发生了变化,我在 Azure DB 中的架构没有得到更新以匹配。部署时,我确实选中了“执行代码优先迁移”。当这不起作用时,我删除了我的数据库,然后在 Azure 门户中重新创建它,认为这会触发它得到更新。但是那没有用,所以我在迁移配置中设置了 AutomaticMigrationsEnabled = True。它仍然不起作用,所以目前我在 Azure 中的数据库没有我的表。如何让 Azure 中的数据库强制更新以匹配我的模型,以便发布的站点可以正常工作?我确实尝试寻找是否有办法将 VS 本地 DB 编写为 Create 查询并在 SQL 管理工作室中执行,但找不到如何做到这一点。

【问题讨论】:

  • 您是否尝试在部署后运行该应用程序?那是迁移开始的时候(而不是在部署过程中)。见here。如果需要,您可以使用update-database -Script 生成脚本。
  • 部署完成后,VS 会自动启动网站......所以是的,我后来运行了它。起初(在删除数据库之前),它会启动得很好,但是在导航到使用新字段的页面时,我会收到一个错误。我尝试了“update-database -Script”,但这只是给了我一个 _MigrationHistory 的插入查询(这是我在尝试其他所有方法之后看到的唯一添加到数据库中的内容)。

标签: asp.net entity-framework azure-sql-database web-deployment entity-framework-migrations


【解决方案1】:

如果您确定在发布设置中选择了update database,并且连接字符串正确且仍未更新。也许以下内容会对您有所帮助:

我有时会遇到这样的问题,这很令人沮丧,我的发布文件是正确的,并且我的设置被设置为允许在发布期间发生 SQL 更新。但有时数据库尚未更新,我得到一个很好的“支持上下文已更改”错误,有时罪魁祸首是尚未更新的迁移表。不幸的是,让您的数据库同步的唯一可靠方法是通过比较 [dbo].[__MigrationHistory]

来检查它们的迁移历史记录。

如果您发布的服务器缺少最新的迁移历史记录,那么您可以通过在包管理器控制台中键入来生成相应的 SQL 脚本:

Update-Database -Script -TargetMigration [migration name]

'migration name' 应该是您发布的服务器的 last 迁移的名称,Visual Studio 将生成 sql 脚本,该脚本可用于将数据库从该目标升级到最新迁移迁移。

有时(虽然很少,对我来说只发生过一次或两次)上面的内容无论出于何种原因都不起作用(通常是因为迁移文件已被删除),如果是这种情况,那么编写脚本是个好主意整个数据库,然后从中挑选你需要的 sql。

Update-Database -Script -SourceMigration:0

这将为每次迁移生成一个脚本,然后您可以根据所做的更改进行挑选。 “最新”更改将更靠近文件底部。每个迁移更改都将从一个 if 检查开始:

IF @CurrentMigration < '201710160826338_mymigration' BEGIN

您可以使用它来选择您需要的位,如果您选择 SQL,请确保包含迁移历史的更新。它将位于 if 块的末尾,如下所示:

INSERT [dbo].[__MigrationHistory]([MigrationId], [ContextKey], [Model], [ProductVersion]) VALUES (N'201710101645265_test', N'API.Core.Configuration', 'Some long checksum')

包含迁移历史将确保 Visual Studio 不再出现问题。

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-01
    相关资源
    最近更新 更多