验证目标数据库模式是否符合实体框架中的内容?

Age*_*191 5 c# testing entity-framework

我们有一个流程,我们的数据库人员脚本通过我们的代码库更改(并使用Juneau将其版本化)到我们的应用程序数据库中.他们擅长计算新列为空,而不是擦除现有数据,但偶尔会有一个列重命名,但没有完全传达.因此,他们将对测试服务器上的数据库模式进行一些更改,我们将更新实体框架以使用这些更改,然后提交我们的代码.这个过程没有问题,除非是在部署的时候.

我们已将TFS设置为将成功的构建部署到适当的服务器,但无法保证该环境的数据库已更新.我们不关心额外的字段/表/视图/等.存在于目标数据库中,但我们希望更改构建以检查数据库是否至少包含EF所知道的所有内容.

我看了这个问题,但我不需要模式完全匹配.另外,我们不希望它直接创建/修改数据库.而这个问题似乎正试图达到类似的理想,但仍然不是我们想要实现的目标.我们只想进行各种类型的集成测试,以验证我们的EF版本是否可以与目标模式一起使用.

Lad*_*nka 1

我想知道为什么您尝试在不更改数据库的情况下部署应用程序。您的应用程序依赖于数据库,因此部署应始终在数据库之后完成。看起来您将投入大量时间来开发验证来修复不正确的部署过程(其中修复过程本身是正确的解决方案)。

无论如何,您可以创建数据库的一些“验证”,但这需要一些时间。如果您使用 EDMX 文件,您可以将其作为 XML 打开并读取其SSDL部分,其中描述了所有预期的表、列、关系、视图(以 SELECT SQL 查询的形式)、存储过程和函数。您可以解析此 XML 部分并使用系统数据库视图(sys.tablessys.columns、...)来查询这些对象是否存在于数据库中。

另一种方法是使用数据库差异。用于将当前测试数据库与目标数据库进行比较的工具。这将需要可以从命令行执行的工具,并且您必须解析其输出以查找重大更改。