Sync Framework在逐个表的基础上同步数据,但我的实体在多组相关的父子表中进行了规范化。这会给我的应用程序带来问题,其中父行可能出现在要处理的服务器上,但子行可能不会出现几秒钟。如果我的客户端应用程序与服务器之间存在连接问题,则子行可能不会出现一段时间。
如何设计我的应用程序来处理与父表分开同步的子表?
我正在研究的具体方案是从后端系统接收服务器上的工作订单,以便使用平板电脑或PDA分发给现场工程师。这些工单是大型复杂的实体,可能涵盖了6个表。工程师完成工作,同步结果,服务器将完成的工单返回到后端系统。
到目前为止,我自己的一些想法发布在下面。
答案 0 :(得分:2)
使用Sync Framework,将相关表添加到自己的同步组中。例如。将OrderHeader和OrderDetail表添加到他们自己的名为Orders的同步组中。
除非直接相关,否则不要在同步组中放置任何其他内容。
然后同步事务中的每个同步组。这样你就可以保证同时获得两个或没有同步的表......
请询问您是否需要有关此流程的更多详细信息。
答案 1 :(得分:0)
我可以自定义Sync Framework以使其尊重数据库关系。当自定义SyncAdapter遇到包含更改的行时,它可以遍历数据库模式中的子关系以获取相关行中的任何更改。这些更改都将添加到同一数据集中,并作为单个事务同步。
优点:
缺点:
答案 2 :(得分:0)
设计应用程序,以便数据在不同时间出现无关紧要。该应用程序将显示或操作当时可用的任何数据。如果稍后显示更多数据,它也会显示。
优点:
缺点:
答案 3 :(得分:0)
校验和有什么用?每次应用程序对实体进行更改时,它都会根据实体的最新内容计算哈希值并将其保存在父行中。当应用程序读取实体时,它可以重新计算哈希值。如果这是当时可用的数据不匹配存储与实体散列,应用程序就知道,有更多的同步工作要做。
优点:
缺点:
答案 4 :(得分:0)
反规范化一切。创建一个数据库视图,将相关表展平为单个连接结果集,或者只将数据存储在一个大表中。配置Sync Framework以同步该一个表,通过视图中的“最左侧”键对其进行批处理,该键应该是层次结构中根表的主键。客户端上的每个事务现在都包含对单个实体所做的所有更改。
优点:
缺点:
答案 5 :(得分:0)
我的想法在评论框内没有足够的空间:
同步主实体而不是关系数据? 我不知道我们是否可以使用Sync Framework执行此操作...可能实现自定义提供程序?
交易仍然存在问题。我们采取一个愚蠢的样本,你有帐户,每个帐户都是主要实体。
数据库A
BeginTransaction
Substract $500 from account 1
Add $200 to account 2
Add $300 to account 3
EndTransaction
数据库B
BeginTransaction
Substract $100 from account 1
Add $100 to account 4
EndTransaction
同步时,您将检测到1上的冲突,但不会发现2,3和4上的冲突。通过此示例,您可以详细说明合并策略,但情况并非总是如此。