将相关表与同步框架同步

时间:2012-02-03 11:04:54

标签: c# .net sql-server-2008 microsoft-sync-framework

现状:

我有一个具有以下结构的数据库:

  • 产品
    • 类别(包含列product_id)
      • 项目(包含列category_id)
        • 评级(包含列item_id)
        • 评论(包含列item_id)
        • 创建者(包含列item_id)

数据库在ms sql 2008服务器上运行。我在不同位置有几个客户端(带有同步框架),它们与服务器同步到本地紧凑的sql文件。

我的问题/问题:
我在服务器上设置了filterParameter(带模板),以便只同步具有特定ID的产品。对于Product表一切顺利,但对于其他表没有。
例如,所有类别都被加载,所有项目都被加载等。我只想要同步的类别具有某个product_id,只有具有该category_id的项目等等...
/>通常我会将它们连接在一起,但我不知道如何在同步框架中执行此操作,因为没有全局sql过程来选择所有更改。但它们都是存储过程。我怎样才能最好地实现这一点?如果需要,我将提供代码或db示例。

Greets Daan&提前谢谢!

顺便说一下,我已经阅读了这篇文章(Syncing related tables),但它不能应用所描述的方法,因为我的数据库中有3个以上的级别。或者我错了?

3 个答案:

答案 0 :(得分:0)

您有正确的解决方案,您认为应该有更好的解决方案。不幸的是,没有。您必须将filter参数添加到每个SyncAdapter,然后手动创建所需的WHERE子句或JOIN

Here是该方法的一个很好的演练。

答案 1 :(得分:0)

最好的情况可能是通过将product_id字段添加到数据库中的所有表来更改模式。这将大大简化过滤器语句,并提高同步操作的性能。

如果您不想更改数据库架构,可以在过滤条件中使用子查询,如下所示。另外,请查看解决此主题的讨论:http://social.microsoft.com/Forums/en-US/syncdevdiscussions/thread/622b37ac-4229-4d34-b093-fbae0731508b

过滤产品和类别表(两个表都需要将“product_id”设置为过滤列):

@"[side].product_id = @ProductId"

过滤物品表:

@"[side].item_id IN (
    SELECT i.item_id 
    FROM Item i 
    INNER JOIN Category c ON i.category_id = c.category_id
    WHERE c.product_id = @ProductId)"

筛选评级表(此级别的其他表格类似):

@"[side].rating_id IN (
    SELECT r.rating_id
    FROM Rating r
    INNER JOIN Item i ON r.item_id = i.item_id
    INNER JOIN Category c ON i.category_id = c.category_id
    WHERE c.product_id = @ProductId)"

答案 2 :(得分:0)

考虑将product_id添加到每个表中。因为当您删除项目,评级,评论等(子项目)时,过滤器中关节的方法可能不起作用。所以要小心。