同步框架,在远程删除时使用过滤器模板

时间:2018-03-12 02:42:38

标签: microsoft-sync-framework

我设置了同步框架2.1,我设法在本地和远程服务器之间进行同步。我使用模板来通过branch_id进行过滤,并且我能够将分支(远程服务器)中的正确记录带到本地。 一切正常,我可以在任何服务器上添加或编辑记录,然后同步(在本地),两者都记录更新。 当我删除遥控器上的记录它们没有在本地删除时,问题就来了,当我在本地删除时奇怪的是,记录实际上已经在服务器上被删除了。

如果我删除过滤器模板,一切正常,但我需要通过branch_id过滤记录,因为从其他分支机构下载所有记录需要更多时间,而且不需要这些记录。

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

即使删除的记录来自同一branch_id,为什么会出现这种情况呢?

有没有办法在删除记录时允许框架将其作为过滤器处理?

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

1 - 我使用branch_id

的过滤列创建模板

2 - 我创建了本地配置

3 - 我创建远程配置,这是我填充刚创建的模板并应用branch_id参数的地方,此处的范围名称可以是“sectionNameScope_2075”,“sectionNameScope_2076”等等。

这是错误情景:

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

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

3 - 当我删除遥控器上的记录时以及同步时,记录未在本地删除,即使它们具有相同的branch_id(本地和远程)

编辑:一个推荐是覆盖orchestrator中的SelectingChanges事件,但我不知道如何实现。

1 个答案:

答案 0 :(得分:0)

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

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

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