0

我试图在同一个表上提供一些范围来同步表中的不同数据集。配置运行良好,没有错误。但是,当我进行同步时,对 SyncOrchestrator.Synchronize() 的调用会超时。

当我只同步一个范围时,似乎所有数据都在同步,而不仅仅是范围过滤器定义的数据。

这是我的其中一个范围的配置代码。每个作用域都在单独的线程中运行,以便它们同时同步。

服务器配置:

var remoteLogVariableScopeDescription = new DbSyncScopeDescription(string.Format("{0}_{1}", DatabaseID, scopeName));
remoteLogVariableScopeDescription.Tables.Add(SqlCeSyncDescriptionBuilder.GetDescriptionForTable("TableName", localConnection));
var remoteDatabaseConfiguration = new SqlSyncScopeProvisioning(remoteConnection, remoteLogVariableScopeDescription);
remoteDatabaseConfiguration.ObjectPrefix = string.Format("Sync_{0}", scopeName);
remoteDatabaseConfiguration.Tables["TableName"].AddFilterColumn("Time);
remoteDatabaseConfiguration.Tables["TableName"].FilterClause = [side].Time >= DATEADD(minute, -1, GETDATE());
remoteDatabaseConfiguration.SetCreateTableDefault(DbSyncCreationOption.Skip);
remoteDatabaseConfiguration.SetUseBulkProceduresDefault(true);
remoteDatabaseConfiguration.CommandTimeout = 30;
remoteDatabaseConfiguration.Apply()

本地供应:

DbSyncScopeDescription localFrequentScopeDescription = SqlSyncDescriptionBuilder.GetDescriptionForScope(string.Format("{0}_{1}", DatabaseID, scopeName), string.Format("Sync_{0}", scopeName), remoteConnection);
var localDatabaseConfiguration = new SqlCeSyncScopeProvisioning(localConnection, localFrequentScopeDescription);
localDatabaseConfiguration.ObjectPrefix = string.Format("Sync_{0}", scopeName);
localDatabaseConfiguration.SetCreateTableDefault(DbSyncCreationOption.Skip);
localDatabaseConfiguration.Apply();

我的问题是:我提供的范围过滤器是否可行?您可以同时在同一张表上运行多个范围吗?

提前感谢您的帮助!

4

2 回答 2

1

SQL Sever Compact Edition 不支持筛选器。您在那里所做的任何更改都将同步回服务器。

于 2012-07-29T14:33:53.860 回答
1

正如 Scott 提到的,SqlCeSyncProvider 不支持过滤。

同样,即使您将客户端更改为 SQL Express/Server,GetDescriptionForScope 在返回范围配置时也不包括过滤器配置。

此外,您可以针对同一范围定义多个,但要注意重叠的范围,其中行可能属于多个范围。这可能会导致同步循环。

例如(假设双向同步)

范围 1 过滤器包括第 1 行

范围 2 过滤器还包括第 1 行

您更新服务器上的第 1 行

范围 1 同步并将第 1 行应用于您的客户端

范围 2 同步并检测范围 1 下载和应用的第 1 行(范围 2 不知道范围 1)

所以范围 2 上传并将第 1 行应用到服务器(服务器中的相同行更改返回到服务器)

范围 1 同步并再次从服务器获取第 1 行,依此类推...

于 2012-07-30T14:10:57.933 回答