C# 使用该数据库跟踪微服务中的数据库架构更改

C# 使用该数据库跟踪微服务中的数据库架构更改,c#,sql-server,database,asp.net-core,microservices,C#,Sql Server,Database,Asp.net Core,Microservices,我们有一个由遗留的单片web应用程序使用的数据库,该应用程序经常由数据库开发团队更改。其他开发团队的任务是将传统web应用的许多功能提取到ASP.NET Core 2.1 WebApi微服务中。每个微服务都使用数据库和数据库优先的方法。所以我们的微服务中有很多模型。但是,传统的web应用程序过着自己的生活,数据库经常被db开发人员修改。所以它打破了我们的微服务模式。我们不能使用迁移,因为它会破坏我们现在无法关闭的传统web应用程序 因此,我们决定使用模型优先的方法和自定义SQL视图,这在自定义E

我们有一个由遗留的单片web应用程序使用的数据库,该应用程序经常由数据库开发团队更改。其他开发团队的任务是将传统web应用的许多功能提取到ASP.NET Core 2.1 WebApi微服务中。每个微服务都使用数据库和数据库优先的方法。所以我们的微服务中有很多模型。但是,传统的web应用程序过着自己的生活,数据库经常被db开发人员修改。所以它打破了我们的微服务模式。我们不能使用迁移,因为它会破坏我们现在无法关闭的传统web应用程序

因此,我们决定使用模型优先的方法和自定义SQL视图,这在自定义EF Core 2.1查询类型和数据库表之间实现了这样的约定。所以,如果数据库开发人员要更改数据库表,例如删除一列或更改列类型或类似的内容,他们会收到一条消息,告诉您有一个包含该列的视图,所以您不能简单地删除它。这种方法为我们修改微服务模型中使用的模式部分提供了这样的保护级别

因此,传统的web应用及其数据库应该能够根据业务需要进行修改。因此,带有数据库的传统单片web应用程序是首选。但是这些修改破坏了我们的微服务模型,但我们当然不想要它


处理这种情况的最佳做法是什么?

这是一个好问题,这个问题经常出现

一个选项是文化性的:实施代码审查流程,其中DB开发人员需要创建拉请求,并且在没有应用程序开发人员至少2次批准的情况下,不能推送/合并DB修改脚本和/或执行发布


如果db开发人员没有通过版本控制循环更改,和/或他们不愿意认识到您的需求,和/或他们不愿意在文化和流程更改过程中合作,就像优秀的敏捷/DevOps爱好者应该做的那样,那么是的,你需要考虑其他的选择。

< P>我认为你真正拥有的是两个开发团队之间缺乏沟通,这是一个更难解决的问题。如果您有来自任意一个团队的开发人员随机地在左、右、中运行SQL脚本,那么您总是会遇到问题

一个不错的技术解决方案是将集成测试作为CI/CD管道的一部分进行维护。在将更改签入数据库项目时,还要为任何受影响的microservice应用程序运行生成和测试

测试失败会立即给microservices开发人员带来危险,甚至可能会阻止将更改转入主分支