C# 使用同步框架同步相关表
当前情况: 我有一个具有以下结构的数据库:C# 使用同步框架同步相关表,c#,.net,sql-server-2008,microsoft-sync-framework,C#,.net,Sql Server 2008,Microsoft Sync Framework,当前情况: 我有一个具有以下结构的数据库: 产品 类别(包含列产品标识) 项目(包含列类别\u id) 评级(包含列项目\u id) 注释(包含列项目\u id) 创建者(包含列项目\u id) 该数据库在ms sql 2008服务器上运行。我有几个位于不同位置的客户端(带有同步框架),它们与服务器同步到本地压缩sql文件 我的问题: 我在服务器上设置了一个filterParameter(带模板),以便只同步具有特定id的产品。产品表一切顺利,但其他表则不然例如,加载所有类别、加
- 产品
- 类别(包含列产品标识)
- 项目(包含列类别\u id)
- 评级(包含列项目\u id)
- 注释(包含列项目\u id)
- 创建者(包含列项目\u id)
- 项目(包含列类别\u id)
- 类别(包含列产品标识)
我在服务器上设置了一个filterParameter(带模板),以便只同步具有特定id的产品。产品表一切顺利,但其他表则不然
例如,加载所有类别、加载所有项目等。我只希望同步具有特定产品标识的类别、具有该类别标识的项目等等
通常我只是将它们连接在一起,但我不知道如何在同步框架中这样做,因为没有全局sql过程来选择所有更改。但它们都是高速存储过程。我如何最好地实现这一点?如果需要,我将提供代码或db示例 欢迎Daan&提前感谢
顺便说一句,我读过这篇文章(),但它不能应用所描述的方法,因为我的数据库中有3个以上的级别。还是我错了 你心里有正确的解决方案,你只是觉得应该有更好的解决方案。不幸的是,没有。您必须将筛选器参数添加到每个SyncAdapter,然后手动创建所需的
WHERE
子句或JOIN
是该方法的一个很好的演练。最好的情况可能是通过向数据库中的所有表添加product\u id字段来更改模式。这将大大简化筛选器语句,并提高同步操作的性能 如果不想更改数据库架构,可以在筛选条件中使用子查询,如下所示。另外,请看以下讨论,其中涉及此主题: 产品和类别表的筛选器(两个表都需要将“Product_id”设置为筛选器列): 项目表的筛选器:
@"[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)"
评级表的过滤器(此级别的其他表将类似):
考虑将product_id添加到每个表中。因为在删除项目、评级、注释等(子项目)时,过滤器中带有关节的方法可能不起作用。所以要小心。嗨,Michael,这篇博文对他的场景不起作用,因为他使用的是点对点提供商而不是离线提供商。请使用与上面发布的方法类似的方法查看其他讨论:
@"[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)"