Sync Framework 范围过滤无法正常工作

Sync Framework scope filtering not working properly

我已经为 POS(销售点)应用程序创建了一个同步应用程序。 一台服务器与多个终端相连。 服务器和终端数据库有 [pos_terminal] table。它有 [POS_TERMINAL_ID] 列作为标识。 这就是我配置服务器的方式。

            try
        {
            string strScopeName = "";
            strScopeName = "TERMINAL_SCOPE_T01";

            SqlConnection serverConn = new SqlConnection(strServer_Connection);

            //pos_terminal

            DbSyncScopeDescription scopeDesc = new DbSyncScopeDescription(strScopeName);
            DbSyncTableDescription pos_terminal_Description = SqlSyncDescriptionBuilder.GetDescriptionForTable("pos_terminal", serverConn);
            scopeDesc.Tables.Add(pos_terminal_Description);

            SqlSyncScopeProvisioning serverProvision = new SqlSyncScopeProvisioning(serverConn, scopeDesc);
            serverProvision.SetCreateTableDefault(DbSyncCreationOption.Skip);

            serverProvision.ObjectSchema = "Sync";
            serverProvision.Tables["pos_terminal"].AddFilterColumn("POS_TERMINAL_ID");
            serverProvision.Tables["pos_terminal"].FilterClause = "[side].[POS_TERMINAL_ID]='T01'";

            if (serverProvision.ScopeExists(strScopeName))
            {
                return;
            }

            serverProvision.Apply();
            MessageBox.Show("Server provisioned with scope " + strScopeName);

        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());


        }

及以下,我如何配置终端数据库。

try
        {
            string strScopeName = "";
            strScopeName = "TERMINAL_SCOPE_T01";

            SqlConnection clientConn = new SqlConnection(strTerimal_Connection);
            SqlConnection serverConn = new SqlConnection(strServer_Connection);
            DbSyncScopeDescription scopeDesc = SqlSyncDescriptionBuilder.GetDescriptionForScope(strScopeName, null, "Sync", serverConn);
            SqlSyncScopeProvisioning clientProvision = new SqlSyncScopeProvisioning(clientConn, scopeDesc);


            clientProvision.ObjectSchema = "Sync";
            clientProvision.SetCreateTableDefault(DbSyncCreationOption.CreateOrUseExisting);

            if (clientProvision.ScopeExists(strScopeName))
            {
                return;
            }

            clientProvision.Apply();
            MessageBox.Show("Terminal provisioned with scope " + strScopeName);

        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }

这些都是基本的过滤。

问题是,在 TERMINAL 01 中,当我将 POS_TERMINAL_ID 设置为 "T01"(在过滤中)时,它运行良好并且过滤后的数据与 [pos_terminal] table。 但是在 TERMINAL 02 中,当我将 POS_TERMINAL_ID 设置为 "T02"(在过滤中)时,数据会同步到 T01,而不是 T02。

同样发生在 TERMINAL 03,(同步 T01,但不是 T03)。

我已经分别测试过,只需在 2 个数据库中创建 2 tables 并测试编码。编码工作正常。 在另一个 table 到 [POS_TERMINAL_ID] 中有一个外键引用。 我已经删除它并在 POS 数据库中进行了测试。但运气不好。

有人对这种情况有解决方案吗?

谢谢

如果要为新范围创建新存储过程,则应指定 SetCreateProceduresForAdditionalScopeDefault。否则,新作用域将简单地重用第一个作用域中的 selectchanges 存储过程。

最好使用作用域模板而不是添加新的 select 更改存储过程。

通过此link 详细了解同步框架配置...