在使用MS Sync Framework进行同步期间,外键关系会丢失

时间:2011-10-14 13:41:23

标签: microsoft-sync-framework

我在本网站和其他网站上看过几篇帖子,说明问题通常是由表格添加到客户端的SyncAgent配置或提供商端的SyncAdapter的顺序引起的。我相信我在这两个地方都正确地对表进行了排序(我有一个N层架构 - 一个提供同步功能的Web服务)。

有没有人知道这种行为的任何其他潜在原因?

另外:Sycning适用于所有表,除了一个。出于某种原因,该表是在客户端上创建的,但是,当在客户端上创建数据库时,即使在初始同步时也没有传输记录。有什么想法吗?

真的很感激任何帮助。 (让这个同步功能起作用,然后客户端基于同步数据使用的数据实体正在变成一个生命任务。难道你不喜欢使用(大规模)框架吗?)

非常感谢您的建议。

[更新:我发现导致一个表的记录从同步中省略的问题,而所有其他表的记录都被同步了。所讨论的表的InsertId列充满了NULL值,并且UniqueIdentifier数据无法与NULL进行比较。其他表没有InsertId列,因为它们仅供下载。尽管如此,没有外键关系的主要问题依然存在]

3 个答案:

答案 0 :(得分:3)

好的,我发现了这句话:

  

默认情况下,以下约束不会复制到客户端:FOREIGN KEY约束,UNIQUE约束和DEFAULT约束

本文档中的

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

因此,一旦在客户端上创建了架构,我就必须“手动”创建关系。

答案 1 :(得分:0)

至关重要您以正确的顺序将适配器添加到服务器端提供程序。您还需要确保避免所有多表循环引用,或者您需要编写一些复杂的多遍同步逻辑,以便在没有外键的情况下首先同步表,然后在事实之后再使用外键。也许循环引用就是为什么你只丢失一个表。这里对问题进行了很好的讨论http://www.8bit.rs/blog/2009/12/replicating-self-referencing-tables-and-circular-foreign-keys-with-microsoft-sync-framework/

当我上个月处理同样的问题时,我发现使用INFORMATION_SCHEMA,您可以编写一个非常好的存储过程来动态确定用于设置通用同步提供程序的关系层次结构。如果你对这样的事情感兴趣,请告诉我......

答案 2 :(得分:0)

在我的答案Sync Framework 2.1 Foreign key constraints

中解释了同步外键关系的一种解决方法