用于数据库差异的 C# 库

Posted

技术标签:

【中文标题】用于数据库差异的 C# 库【英文标题】:C# library for database diff(ing) 【发布时间】:2011-08-30 13:51:27 【问题描述】:

在整理用于增量数据库更新的迁移脚本时,我发现现成的数据库差异工具(我研究过的)都不会生成我们开发过程所需的迁移脚本。

与几乎所有其他开发项目一样,我们需要能够在不丢失生产数据的情况下使生产模式与最新的开发模式保持同步。

到目前为止,方法是删除并重新创建任何不是表的对象(注意将序列 nextvals 更新为适当的值),然后通过删除不再存在的列、添加列来处理表差异已创建的列,重命名其类型或长度已更改的列,添加新列定义,然后使用适当的类型转换使用数据填充更改的列。

当前的方法是完全自动化的,但它不考虑已简单重命名的列。区分表定义(DBMS_METADATA_DIFF)并没有给出任何机器可理解的线索,即列删除后跟列添加实际上是列重命名。对于人类来说,列重命名可能是显而易见的,特别是如果重命名只是语法更正或选择更合适的名称。

我正在尝试通过编写自己的数据库差异脚本生成器并添加用于发现列重命名的逻辑(支持人工干预、确认等)来解决此问题。现在,我很确定我必须重新发明另一个***。

有什么好的开源库我应该看看吗?我更喜欢 C#,但由于它是我正在使用的 Oracle,因此可能有一些很好的 Java 实现。任何指针表示赞赏。

【问题讨论】:

就我个人而言,我手动更新所有脚本,并且我有一个带有存储过程和脚本模板的数据库版本控制系统,因此我始终可以确定哪些脚本由谁以及何时执行。我不喜欢查看自动生成的数据库模式更新脚本,如 sql compare 或其他工具。我喜欢让团队中的开发人员简单地手写他们在脚本中所做的事情,例如更改表添加列等...易于查看和维护 【参考方案1】:

我们使用 RedGate SQL 比较和 SQL 数据比较 API 在安装时在我们的引导数据库和目标(客户端)数据库之间生成差异架构和数据更新脚本。它工作得很好。 RedGate 提供了一个类似的 Oracle 产品(没有使用过,所以你的里程可能会有所不同)

http://www.red-gate.com/products/oracle-development/schema-compare-for-oracle/.

PS,我知道它不是开源的,但我想你会很难找到像这样易于使用的库。

【讨论】:

以上是关于用于数据库差异的 C# 库的主要内容,如果未能解决你的问题,请参考以下文章

C# 之 LINQ简析

C# 用于 UI,c++ 用于库

用于 C++ 的 C# 包装器,但仅编译为静态库

用于在 C++ 中抽象数据库访问的开源库?

C#下用于同时使用OpenCvSharp和Emgu.CV两个库的相互转换库

管理具有差异的跨平台项目的存储库