Sync Framework,在远程删除和使用过滤器模板时不会在本地服务器上删除记录

Sync Framework, records not deleted on local server when deleting on remote and using filter template

我设置了同步框架 2.1,并且成功地在本地和远程服务器之间进行了同步。我使用模板按 branch_id 进行过滤,我能够将适当的记录从分支(远程服务器)带到本地。 一切正常,我可以在任何服务器上添加或编辑记录,然后同步(在本地)并且记录在两个服务器上都更新得很好。 当我在远程删除记录时出现问题,它们在本地没有删除,奇怪的是当我在本地删除时,记录实际上在服务器上被删除就好了。

如果我删除过滤器模板,一切都会 100% 正常,但我需要按 branch_id 过滤记录,因为从其他分支下载所有记录需要更多时间,而这些记录是不必要的。

是不是过滤器不允许删除本地记录?

为什么即使删除的记录来自同一个 branch_id,也会发生这种情况?

有没有一种方法可以在删除记录时允许框架将其处理为无过滤器?

对于那些知道它是如何工作的人来说,这是代码的基本场景:

1 - 我通过 branch_id

使用过滤器列创建模板

2 - 我创建本地配置

3 - 我创建了远程配置,这是我填充刚刚创建的模板并应用 branch_id 参数的地方,此处的范围名称可以是 "sectionNameScope_2075"、"sectionNameScope_2076" 和依此类推

这是错误场景:

1 - 我可以在本地或远程创建或编辑记录,一切正常。

2 - 我可以删除本地记录,一切正常。

3 - 当我删除远程记录和同步记录时,本地记录不会被删除,即使它们具有相同的 branch_id(本地和远程)

编辑:一项建议是覆盖协调器中的 SelectingChanges 事件,但我不知道如何实现。

事实证明,当我在模板中设置参数而不是使用 [side] 时,我使用的是 [base],因此导致了这种奇怪的行为。 我不知道为什么我使用 base 而不是 side 工作得很好,即使你查看 sp_select_changes 存储过程并发现 base 是主要的 table 别名,但正因为如此,我不怀疑那是问题。

// changed this
remoteServerProvisionTemplate.Tables["users"].FilterClause = "[base].[branch_id] = @branch_id";

// to this
remoteServerProvisionTemplate.Tables["users"].FilterClause = "[side].[branch_id] = @branch_id";