首页 > 解决方案 > 使用带有版本控制的 MVC .net 更新 SQL Server 数据库架构

问题描述

我们正在使用 Azure 上托管的 SQL Server 数据库和 Web 应用程序。我们在带有版本列的表中维护数据库版本。

我们添加了代码来Application_Start()检查数据库的版本,并从我们的 ASP.NET MVC 应用程序执行版本高于当前版本的命令来升级架构。

它工作正常,直到最近我们注意到在几秒钟内Application_Start事件再次被触发并且升级模式功能运行了两次。

我们如何通过添加一些检查是否有另一个实例升级模式来防止升级模式,或者有没有办法不Application_Start多次触发事件?

我们使用 Azure Dev Ops 管道将代码部署到 Web 应用程序。

谢谢!

标签: sql-serverasp.net-mvcazure-web-app-serviceazure-sql-database

解决方案


您的 Web 应用程序可能会因您无法控制的多种原因而被回收。因此,由于您刚才提到的原因,将代码放在 Application_Start 中以运行使您的数据库保持最新状态的脚本并不是最佳选择。

由于您已经在使用 Dev Ops 管道,因此有一种内置方法可以将其作为部署的一部分来处理。查看 Visual Studio 中的数据库项目类型。这将允许您以文本形式编写所有表、存储过程、视图等的脚本,并将其置于源代码控制之下。然后,作为 Dev Ops 管道的一部分,您可以使用Visual Studio 构建任务来构建您的数据库项目并创建一个 DACPAC 作为输出。然后,使用Azure SQL 数据库部署任务获取 DACPAC 输出并将其部署到您的 Azure SQL 实例。

这样,您就知道在完成生产部署之前您的数据库已经升级。


推荐阅读