【问题标题】:Azure SQL database column not updated after redeployment of ASP.NET Core MVC Website重新部署 ASP.NET Core MVC 网站后 Azure SQL 数据库列未更新
【发布时间】:2018-06-05 19:16:42
【问题描述】:

我正在使用 C# 开发一个 ASP.NET Core MVC Web 应用程序。我只将我的应用程序部署到 Azure 一次,并使用 Azure SQL 数据库来存储应用程序的数据。我对数据库进行了本地更改(通过在数据库中名为Logs 的表中添加一个名为LogType 的额外列)并应用了迁移,并且在本地一切正常。我将我的应用程序重新部署到 Azure,它成功且没有错误。但是,当我浏览该网站时,我不断收到 Sql 异常:

SqlException:列名“LogType”无效。

所以我想问如何应用迁移并更新 Azure SQL 数据库以反映我的本地更改?

【问题讨论】:

  • 你使用的是EntityFramework还是EntityFramework Core?
  • @TamásHuj 我正在使用 EF Core
  • 在这种情况下,EF 核心自动迁移可能是解决方案:stackoverflow.com/questions/39526595/…

标签: asp.net azure asp.net-core-mvc azure-sql-database azure-web-app-service


【解决方案1】:
【解决方案2】:

理想情况下,有一个 CI/CD 管道将更改(代码、数据库架构等)传播到环境(例如开发、测试、暂存、生产等)上游,包括 BVT 测试,以防止破坏东西。

在下面找到传播此更改的几个选项:

--- 选项 1 ---

一种方法是通过 SSMS(例如 SQL Server Management Studio,版本 17.2) 连接到 Azure SQL 服务器/数据库并运行如下示例所示的 T-SQL 脚本(更改表名和调试打印),其中将 LogType 列添加到名为 dbo.Customer 的现有表中。

此外,此脚本也可以在 Azure 门户中执行,方法是导航到 Azure SQL 数据库 > 查询编辑器(预览版)并运行脚本。

IF EXISTS(SELECT * FROM sys.columns WHERE object_id = OBJECT_ID('dbo.Customer') AND name='LogType')
BEGIN
    PRINT 'Column LogType already exists on table dbo.Customer and it is configured properly.'
END
ELSE
BEGIN
    PRINT 'Adding column LastName to table dbo.Customer...'

    ALTER TABLE dbo.Customer
    ADD LogType VARCHAR(100) NOT NULL
END
PRINT '--- DONE ---'
GO

--- 选项 2 ---

另一种选择是手动LogType 列添加到表中,这可以通过使用 SSMS 连接到 Azure SQL 服务器/数据库来完成strong>,右键单击表名并选择设计。然后,添加新列。

【讨论】:

  • 谢谢!它可以工作,但我必须更改 SQL 代码以添加 nullable 列,否则,它需要一个默认值,因为表 dbo.Logs 填充了数据。
  • 您知道在发布网站时如何通过 EF Core 自动执行此过程吗?
猜你喜欢
  • 1970-01-01
  • 2020-12-30
  • 2011-01-28
  • 1970-01-01
  • 2013-11-28
  • 2023-04-03
  • 2023-03-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多