正在使用同步框架同步相关表
本文关键字:同步 框架 | 更新日期: 2023-09-27 18:22:17
当前情况:
我有一个数据库,结构如下:
- 产品
- 类别(包含列product_id)
- 项(包含列category_id)
- 评级(包含列item_id)
- 注释(包含列item_id)
- 创建者(包含列item_id)
- 项(包含列category_id)
- 类别(包含列product_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等(子项)时,过滤器中包含关节的方法可能不起作用。所以要小心。