Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用同步框架同步相关表_C#_.net_Sql Server 2008_Microsoft Sync Framework - Fatal编程技术网

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

我的问题:
我在服务器上设置了一个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)"