【问题标题】:How to handle SQL Server CE in source control?如何在源代码管理中处理 SQL Server CE?
【发布时间】:2012-03-01 21:04:46
【问题描述】:

我很好奇我们应该如何在 Git 源代码控制中处理 SQL Server Compact。每次开发人员更改数据时,都会发生二进制合并冲突。有没有办法让这个数据库的开发保持同步?如果两个开发人员拉下源代码并修改架构,那么其中一个开发人员将丢失他们的更改,因为您真正能做的就是接受 sdf 文件的服务器版本或本地版本。对于这种情况有什么建议?在解决方案中使用 SQL Server CE 的好处是人们可以下载一个新的项目副本,按 F5,然后他们就可以开始比赛了。这里有一些中间立场吗?

我不太担心保持数据同步,而是对数据库架构的修改。与您可以使用比较工具将两个版本合并在一起的代码文件不同,冲突会导致“我的”或“您的”场景。

【问题讨论】:

    标签: .net sql git schema sql-server-ce


    【解决方案1】:

    您可以编写 SQL 语句来创建和填充数据库并将其签入,而不是在 SDF 中创建架构。SQL 是文本,可以使用现有工具进行合并和比较。您需要一个预构建命令来运行 SQL 并重新创建您的数据库。

    【讨论】:

    • 你实际上给了我一个想法。我认为 EF 代码优先将是一个很好的解决方案,因为代码驱动架构,现在它们也有数据迁移:D
    【解决方案2】:

    我通常会以与使用完整的 sql server 相同的方式来处理这个问题。每个开发人员都应该拥有自己的数据库副本,该副本未纳入源代码管理。

    作为最佳实践,您可能应该维护一组 sql 脚本,将您从一个版本迁移到下一个版本,这些比在源代码控制中拥有一个 sqlce 数据库更重要,因为您可以看到提交和合并之间发生了什么变化必要时进行更改。它还允许您在版本之间迁移数据。

    我通常做的是在启动时运行一个运行状况检查组件。它做的第一件事是检查是否有 ce 数据库。如果没有数据库,它将创建它并运行所有脚本以将架构升级到当前版本。如果有数据库,它会使用一种机制来确定数据库的当前版本(可能是版本表或程序集版本),然后运行所需的脚本以将其升级到最新版本。

    【讨论】:

      【解决方案3】:

      类似的问题是不同的,例如不同开发环境的路径,我通常这样解决:

      我将主机名附加到密钥中:

      <add key="ImportPath_MyCoolUbuDev" value="d:\import" />
      <add key="ImportPath_alexf" value="m:\dev\p1\import" />
      

      也许这会给你一个想法。

      我不知道,是否每个人都可以将自己的副本保留在本地(名称不同)并仅在他们想要升级自己时覆盖它。

      【讨论】:

        【解决方案4】:

        我遇到了同样的问题。好吧,把git换成svn,把CE换成标准版……

        我们的设置是,每个开发人员都有自己的必要数据库副本,包括集中式开发、QA 和产品版本。每个服务器(注意:每个服务器)都单独存储在存储库中。

        我使用this code 为对象编写脚本,然后将批处理文件提交到存储库。虽然本文讨论了 SVN 的解决方案,但您应该能够非常轻松地将其替换为相应的 git 调用。

        在每台带有数据库实例的机器上每晚运行一次,Bob 是你的叔叔。干杯!

        【讨论】:

          猜你喜欢
          • 2010-11-13
          • 1970-01-01
          • 2010-10-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-10-09
          相关资源
          最近更新 更多