如何在源代码管理中处理SQL Server CE?

时间:2012-03-01 21:04:46

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

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

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

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

我通常会以与使用完整的sql server相同的方式处理此问题。每个开发人员都应该拥有自己的数据库副本,而不是将其放入源代码管理中。

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

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

答案 2 :(得分:0)

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

我将主机名附加到密钥,如下所示:

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

也许这会给你一个想法。

我不知道,如果每个人都可以保留自己的本地副本(命名方式不同)并且仅在他们想要升级时自己覆盖它们。

答案 3 :(得分:0)

我遇到了同样的问题。好吧,用标准版的svn和CE替换git ......

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

我正在使用this code编写对象脚本,然后批处理文件以提交到repo。虽然本文讨论了SVN的解决方案,但您应该可以使用相应的git调用轻松替换它。

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