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

时间:2015-05-06 12:19:34

标签: c# sync microsoft-sync-framework

我为POS(销售点)应用程序创建了一个同步应用程序。 一台服务器与多个终端链接。 服务器和终端数据库有[pos_terminal]表。它有[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]表同步。 但是在TERMINAL 02中,当我将POS_TERMINAL_ID设置为“T02”(在过滤中)时,数据会同步到T01,但不会与T02相关。

在TERMINAL 03中也是如此,(同步T01,但不是T03)。

我已经单独测试过,只需在2个数据库中创建2个表并测试编码。编码工作正常。 另一个表中有一个外键引用到[POS_TERMINAL_ID]。 我已将其删除,并在POS数据库中进行了测试。但没有运气。

任何人都有针对这种情况的解决方案吗?

由于

1 个答案:

答案 0 :(得分:0)

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

更好,使用范围模板而不是添加新的选择更改存储过程。

通过这个link来详细了解同步框架配置......