你如何处理“Sync Framework不会自动处理删除不再满足过滤条件的行”

时间:2011-12-08 05:47:40

标签: microsoft-sync-framework

http://msdn.microsoft.com/en-us/library/dd918848.aspx

“了解范围是表和过滤器的组合非常重要。例如,您可以定义一个名为sales-WA的过滤范围,该范围仅包含customer_sales表中华盛顿州的销售数据。在同一个表上定义另一个过滤器,例如sales-OR,这是一个不同的范围。如果定义过滤器,请注意Sync Framework不会自动处理不再满足过滤条件的行的删除。例如,如果用户或应用程序更新用于过滤的列中的值,则行会从一个范围移动到另一个范围。该行将发送到该行现在属于的新范围,但该行不会从旧范围中删除你的申请必须处理这种情况。“

我只是想知道有人可以解释如何处理“Sync Framework不会自动处理不再满足过滤条件的行的删除”吗?

非常感谢。

1 个答案:

答案 0 :(得分:2)

同步提供程序将(作为配置步骤的一部分)自动创建逻辑删除表和触发器以跟踪行删除。当行未被删除但以这种方式更新时,如果超出范围,则自动生成的模式不会将这些记录为删除。它会将它们记录为更新。因此,为了扩展Microsoft示例,假设您的应用程序仅将华盛顿数据同步到华盛顿销售代表。最初作为华盛顿销售进行的一些销售被更正并移至俄勒冈州。同步框架将不知道它应该从华盛顿代表的本地数据库中删除这些现在的俄勒冈州记录。

您有几种方法可以解决这个问题:

  • 修改配置工具以生成可处理该情况的触发器,而不是默认触发器。考虑扩展SqlSyncScopeProvisioning来实现这一目标。如果操作正确,这可能是最具可扩展性/可扩展性的解决方案。
  • 修改您的应用程序以检测将行移出作用域的尝试,并让应用程序删除该行并重新插入,而不是仅仅更新它(可能在存储过程中)。如果您已经使用存储过程来处理更新,那么这可能是一个不错的选择。
  • 添加后台服务或进程,查找与范围不匹配的记录并删除它们。这可能最终成为最简单的解决方案 - 特别是如果您的应用程序已经部署完毕。