我设置了同步框架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事件,但我不知道如何实现。
答案 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";