0

我目前正在开发一个使用 SQL Server Compact 3.5 数据库的平板电脑应用程序。需要在平板电脑之间同步数据。经过一些研究(即thisthis),我和我的团队决定拥有一个由 SQL Server 2008 R2 托管的中央数据库。

在实现了这个例子之后,这种方法有几个缺点:

  • 我想同步整个数据库,而不仅仅是表的一个子集。这将需要向缺少主键的表添加主键,更不用说将每个表添加到同步范围。

  • 根据同步方向,服务器数据库(由 SQL Server 2008 R2 托管)或客户端数据库(SQL Server Compact 3.5)具有优先权,这意味着一个数据库的数据可能会覆盖另一个数据库的数据。

我相信更改跟踪可能很有用,并且希望在适用的情况下利用这种方法为以下场景找到解决方案:

服务器和三张表目前在db中同一个数据库同步。

ID | NAME
---------
1  | JIM
2  | BOB
3  | JANE

这三个平板电脑离线以执行他们的操作。

平板电脑 1 增加了以下内容:

4 | JOE

平板电脑 2 添加了以下内容(假设在平板电脑 1 之后):

4 | BILL

平板电脑 3 增加了以下内容(假设平板电脑 2 之后):

4 | DAVE

然后,平板电脑以任何顺序重新在线连接以进行同步。说完同步,服务端db和客户端dbs应该有以下数据:

ID | NAME
---------
1  | JIM
2  | BOB
3  | JANE
4  | JOE
5  | BILL
6  | DAVE

从 DBA 的角度来看,存在合并复制,但我在 db 服务器上没有任何系统管理员权限(或在 pc 本身上的管理权限,以便给自己在 sql server 中的系统管理员权限)。因此,如果可能,我想避免这条路线,并坚持使用同步框架(或更好)编写解决方案。

在实施上述示例后,我是否走上了正确的轨道,最终找到了适合我的场景的解决方案,还是我需要做其他事情?

4

1 回答 1

1

Sync Fx 需要一个 PK(它还能如何唯一地识别哪一行发生了变化?)

同样,您必须明确告诉它要同步哪些表。

不过,您的情况会导致冲突。Sync Fx 不会为您重新排序 PK 值。它从源读取的是保存在目标上的内容。(它怎么知道client1中的#4实际上是服务器上的#5?)

同步 Fx 与否,对 PK 使用标识值将导致 PK 值冲突。

于 2015-03-19T06:59:18.950 回答