正在使用同步框架同步相关表

本文关键字:同步 框架 | 更新日期: 2023-09-27 18:22:17

当前情况:

我有一个数据库,结构如下:

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

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

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

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

问候Daan&提前感谢!

顺便说一句,我读过这篇文章(同步相关表),但它不能应用所描述的方法,因为我的数据库中有3个以上的级别。还是我错了

正在使用同步框架同步相关表

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

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

Product和Category表的筛选器(这两个表都需要将"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)"

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

这是一个很好的方法演练。

考虑将product_id添加到每个表中。因为在删除Item、Rating、Comment等(子项)时,过滤器中包含关节的方法可能不起作用。所以要小心。