sql-server - 使用带有版本控制的 MVC .net 更新 SQL Server 数据库架构
问题描述
我们正在使用 Azure 上托管的 SQL Server 数据库和 Web 应用程序。我们在带有版本列的表中维护数据库版本。
我们添加了代码来Application_Start()
检查数据库的版本,并从我们的 ASP.NET MVC 应用程序执行版本高于当前版本的命令来升级架构。
它工作正常,直到最近我们注意到在几秒钟内Application_Start
事件再次被触发并且升级模式功能运行了两次。
我们如何通过添加一些检查是否有另一个实例升级模式来防止升级模式,或者有没有办法不Application_Start
多次触发事件?
我们使用 Azure Dev Ops 管道将代码部署到 Web 应用程序。
谢谢!
解决方案
您的 Web 应用程序可能会因您无法控制的多种原因而被回收。因此,由于您刚才提到的原因,将代码放在 Application_Start 中以运行使您的数据库保持最新状态的脚本并不是最佳选择。
由于您已经在使用 Dev Ops 管道,因此有一种内置方法可以将其作为部署的一部分来处理。查看 Visual Studio 中的数据库项目类型。这将允许您以文本形式编写所有表、存储过程、视图等的脚本,并将其置于源代码控制之下。然后,作为 Dev Ops 管道的一部分,您可以使用Visual Studio 构建任务来构建您的数据库项目并创建一个 DACPAC 作为输出。然后,使用Azure SQL 数据库部署任务获取 DACPAC 输出并将其部署到您的 Azure SQL 实例。
这样,您就知道在完成生产部署之前您的数据库已经升级。
推荐阅读
- git - 如何在 git 存储库中编辑私有方法以使其可维护
- graphql - Apollo 链路状态错误 - 向源发送请求时出错
- public-key-encryption - base58 不能得到 34 个字符的结果(就像比特币地址那样),但是 68 个字符
- json - React JS - 如何将 json 数据绑定到下拉列表
- javafx - JavaFX 中的“脏节点”是什么?
- reactjs - TypeError:无法读取未定义的属性“字符串”
- javascript - 如何在函数内部创建全局变量?
- influxdb - Statsd 客户端未发送所有事件指标
- c# - 根据用户下拉选择更改排序方法
- powershell - 在 Powershell 中查询给定进程的 TCP 连接数