【问题标题】:Syncing related tables with sync framework使用同步框架同步相关表
【发布时间】:2012-02-03 11:04:54
【问题描述】:

现状:

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

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

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

我的问题/问题:
我已经在服务器上设置了一个 filterParameter(带模板),以便只同步具有特定 id 的产品。 Product 表一切顺利,但其他表则不然。
例如,所有类别都已加载,所有项目都已加载等。我只希望同步具有该特定 product_id 的类别,仅具有该 category_id 的项目等等...

通常我只是将它们连接在一起,但我不知道如何在同步框架中做到这一点,因为没有全局 sql 过程来选择所有更改。但它们都是独立的存储过程。我将如何最好地实现这一点?如果需要,我会提供代码或数据库示例。

向 Daan 打招呼并提前致谢!

顺便说一句,我读过这篇文章 (Syncing related tables),但它不能应用所描述的方法,因为我的数据库中有超过 3 个级别。还是我错了?

【问题讨论】:

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


    【解决方案1】:

    最好的情况可能是通过将 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】:

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

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

    【讨论】:

    • 嗨,Michael,这篇博文不适用于他的场景,因为他使用的是点对点提供商而不是离线提供商。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多