我们有一个流程,我们的数据库人员脚本使用我们的代码库更改(并使用Juneau将其版本化)到我们的应用程序数据库中。他们擅长计算新列为空,而不是擦除现有数据,但偶尔会有一个列重命名,但没有完全传达。因此,他们将对测试服务器上的数据库模式进行一些更改,我们将更新实体框架以使用这些更改,然后提交我们的代码。这个过程没问题,除了以便在什么时候进行部署。
我们已将TFS设置为将成功的构建部署到适当的服务器,但无法保证该环境的数据库已更新。我们不关心额外的字段/表/视图/等。存在于目标数据库中,但我们希望更改构建以检查数据库是否至少包含EF所知道的所有内容。
我查看了this question,但我不需要架构完全匹配。另外,我们不希望它直接创建/修改数据库。并且this question似乎正在努力实现类似的理想,但仍然不是我们想要达到的目标。我们只想进行各种类型的集成测试,以验证我们的EF版本是否可以与目标模式一起使用。
答案 0 :(得分:1)
我想知道您为什么尝试在不更改数据库的情况下部署应用程序。您的应用程序依赖于数据库,因此应始终在数据库之后进行部署。看起来您将投入大量时间来开发验证来修复错误的部署过程(修复过程本身就是正确的解决方案)。
无论如何,你可以创建一些数据库的“验证”,但这需要一些时间。如果您正在使用EDMX文件,则可以将其打开为XML并阅读其SSDL部分,该部分描述了所有预期的表,列,关系,视图(以SELECT SQL查询的形式),存储过程和函数。您可以解析此XML部分并使用系统数据库视图(sys.tables
,sys.columns
,...)来查询数据库中是否存在这些对象。
另一种方法可以使用数据库差异。用于比较当前测试数据库与目标测试数据库的工具。这将需要可以从命令行执行的工具,您将不得不解析其输出以查找重大更改。