【问题标题】:Sync Framework Synchronization of filtered data on different office locations同步框架在不同办公地点同步过滤数据
【发布时间】:2015-04-13 07:27:51
【问题描述】:

我正在使用 Microsoft 同步框架。它工作正常。但我需要的是: 我在不同地点有 10 个中心。所有中心的数据都可以在一个集中位置获得。我正在将一个中心的数据与 FilterClause 同步,将另一个中心的数据与另一个 FilterClause 同步。它不显示任何错误,但在所有位置同步相同的数据;而不是相关的中心数据。

我使用的是:Microsoft Sync Framework、C# 和 Sql Server 数据库:

这里是编码:

try
        {
            var serverConn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["conOnline"].ConnectionString);
            var clientConn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["conLocal"].ConnectionString);
            string scopeName = tableName + CenterCode + "Scope";

            var serverProvision = new SqlSyncScopeProvisioning(serverConn);
            if (!serverProvision.ScopeExists(scopeName))
            {
                var serverScopeDesc = new DbSyncScopeDescription(scopeName);
                var serverTableDesc = SqlSyncDescriptionBuilder.GetDescriptionForTable(tableName, serverConn);
                serverScopeDesc.Tables.Add(serverTableDesc);
                foreach (string key in KeyNames)
                {
                    serverScopeDesc.Tables[tableName].Columns[key].IsPrimaryKey = true;
                }
                serverProvision.PopulateFromScopeDescription(serverScopeDesc);
                serverProvision.SetCreateTableDefault(DbSyncCreationOption.CreateOrUseExisting);

                //filter
                try
                {
                    serverProvision.Tables[tableName].AddFilterColumn("cen_cd");
                    serverProvision.Tables[tableName].FilterClause = "[side].[cen_cd]='" + CenterCode + "'";
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
                serverProvision.Apply();
            }

            var clientProvision = new SqlSyncScopeProvisioning(clientConn);
            if (!clientProvision.ScopeExists(scopeName))
            {
                var clientScopeDesc = new DbSyncScopeDescription(scopeName);
                var clientTableDesc = SqlSyncDescriptionBuilder.GetDescriptionForTable(tableName, serverConn);
                clientScopeDesc.Tables.Add(clientTableDesc);
                foreach (string key in KeyNames)
                {
                    clientScopeDesc.Tables[tableName].Columns[key].IsPrimaryKey = true;
                }
                clientProvision.PopulateFromScopeDescription(clientScopeDesc);
                clientProvision.Apply();
            }

            var syncOrchestrator = new SyncOrchestrator();
            //setup providers
            var remoteProvider = new SqlSyncProvider(scopeName, serverConn);
            syncOrchestrator.RemoteProvider = remoteProvider;

            var localProvider = new SqlSyncProvider(scopeName, clientConn);
            syncOrchestrator.LocalProvider = localProvider;
            syncOrchestrator.Direction = SyncDirectionOrder.UploadAndDownload;
            var syncStats = syncOrchestrator.Synchronize();
        }
        catch (Exception ex)
        {
            string msg = "Error:\n" + ex.Message + "\n\nInner Exception:\n" + ex.InnerException;
            MessageBox.Show(msg);
        }

【问题讨论】:

    标签: c# winforms microsoft-sync-framework


    【解决方案1】:

    您能否在您的服务器上检查您针对该表有多少 *_selectchanges 存储过程以及它们是否有过滤器?

    查看您的代码,您没有使用范围过滤器模板(使用过滤器创建模板范围并使用不同的过滤器值基于模板创建范围)。

    并且由于您没有指定 SetCreateProceduresForAdditionalScopeDefault,您的所有范围都在重复使用相同的 _selectchanges SP,而不是为每个范围创建一个新的。

    【讨论】:

    • 您能否提供一些我可以解决此问题的材料的代码示例...
    • 已经提到您需要添加的内容 - SetCreateProceduresForAdditionalScopeDefault
    • 我在提到 SetCreateProceduresForAdditionalScopeDefault(CreateOrUseExisting) 时收到此错误:从模板创建范围时无法更改 CreateProceduresForAdditionalScope
    • 在使用模板时不能使用 SetCreateProceduresForAdditionalScopeDefault。上面的说明适用于您拥有的现有代码。如果您已更改为模板,则不必使用它,因为您不会为从模板创建的每个新范围创建新的存储过程。基于模板的范围都共享相同的存储过程。查看此内容以了解有关配置的更多信息:jtabadero.wordpress.com/2010/09/02/sync-framework-provisioning
    猜你喜欢
    • 2010-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 2014-02-23
    • 2011-01-26
    • 2010-12-12
    相关资源
    最近更新 更多