现状:
我有一个具有以下结构的数据库:
数据库在ms sql 2008服务器上运行。我在不同位置有几个客户端(带有同步框架),它们与服务器同步到本地紧凑的sql文件。
我的问题/问题:
我在服务器上设置了filterParameter(带模板),以便只同步具有特定ID的产品。对于Product表一切顺利,但对于其他表没有。
例如,所有类别都被加载,所有项目都被加载等。我只想要同步的类别具有某个product_id,只有具有该category_id的项目等等...
/>通常我会将它们连接在一起,但我不知道如何在同步框架中执行此操作,因为没有全局sql过程来选择所有更改。但它们都是存储过程。我怎样才能最好地实现这一点?如果需要,我将提供代码或db示例。
Greets Daan&提前谢谢!
顺便说一下,我已经阅读了这篇文章(Syncing related tables),但它不能应用所描述的方法,因为我的数据库中有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添加到每个表中。因为当您删除项目,评级,评论等(子项目)时,过滤器中关节的方法可能不起作用。所以要小心。