.NET SyncFramework同步作用域

.NET SyncFramework同步作用域,.net,microsoft-sync-framework,.net,Microsoft Sync Framework,我必须同步两个数据库,本地和远程。 如果我有这个例子: 本地数据库: 1。约翰 2.乔 3.标记 远程: 1。约翰 2.乔 我同步两个数据库,最终结果是两个数据库中都有三条记录,但同步过程会触发记录#1和#2的错误(无法插入),因为它们都存在于这两个数据库中。默认情况下,同步框架在这种情况下不会做任何事情,只会继续,这对我来说没问题 是否有一种方法可以设置同步范围,以便只同步两个数据库中的不相同记录(因此不会首先生成这些错误) 我的代码如下所示(来自Microsoft的示例代码): sqlsyn

我必须同步两个数据库,本地和远程。 如果我有这个例子:

本地数据库: 1。约翰 2.乔 3.标记

远程: 1。约翰 2.乔

我同步两个数据库,最终结果是两个数据库中都有三条记录,但同步过程会触发记录#1和#2的错误(无法插入),因为它们都存在于这两个数据库中。默认情况下,同步框架在这种情况下不会做任何事情,只会继续,这对我来说没问题

是否有一种方法可以设置同步范围,以便只同步两个数据库中的不相同记录(因此不会首先生成这些错误)

我的代码如下所示(来自Microsoft的示例代码):

sqlsyncscopeprovisioningserverprovision=新的SqlSyncScopeProvisioning(remoteServerConn);
DbSyncOpeDescription remoteScopeDesc=新的DbSyncOpeDescription(remoteProvisioningScopeName);
DbSyncTableDescription tableDesc=SqlSyncDescriptionBuilder.GetDescriptionForTable(remoteTableName,remoteServerConn);
remoteScopeDesc.Tables.Add(tableDesc);
serverProvision.PopulateFromScopeDescription(remoteScopeDesc);SetCreateTableDefault(DbSyncCreationOption.Skip);
serverProvision.Apply();
SqlSyncScopeProvisioning ClientProvisioning=新的SqlSyncScopeProvisioning(localServerConn);
DbSyncOpeDescription LocalScopeDescription=SqlSyncDescriptionBuilder.GetDescriptionForScope(remoteProvisioningScopeName,remoteServerConn);
clientProvision.PopulateFromScopeDescription(localScopeDesc);
clientProvision.Apply();
SyncOrchestrator SyncOrchestrator=新的SyncOrchestrator();
syncOrchestrator.LocalProvider=新的SqlSyncProvider(remoteProvisioningScopeName,localServerConn);
syncOrchestrator.RemoteProvider=新的SqlSyncProvider(remoteProvisioningScopeName,remoteServerConn);
syncOrchestrator.Direction=syncDirection;
((SqlSyncProvider)syncOrchestrator.LocalProvider).ApplyChangeFailed+=新事件处理程序(程序\u ApplyChangeFailed);
SyncOperationStatistics syncStats=syncOrchestrator.Synchronize();

同步框架执行增量同步,即自上次同步以来发生的更改,而不是源和目标之间的差异

SqlSyncScopeProvisioning serverProvision = new SqlSyncScopeProvisioning(remoteServerConn);
DbSyncScopeDescription remoteScopeDesc = new DbSyncScopeDescription(remoteProvisioningScopeName);
DbSyncTableDescription tableDesc = SqlSyncDescriptionBuilder.GetDescriptionForTable(remoteTableName, remoteServerConn);
remoteScopeDesc.Tables.Add(tableDesc); 
serverProvision.PopulateFromScopeDescription(remoteScopeDesc);                   serverProvision.SetCreateTableDefault(DbSyncCreationOption.Skip);    
serverProvision.Apply(); 
SqlSyncScopeProvisioning clientProvision = new SqlSyncScopeProvisioning(localServerConn);
DbSyncScopeDescription localScopeDesc = SqlSyncDescriptionBuilder.GetDescriptionForScope(remoteProvisioningScopeName, remoteServerConn);
clientProvision.PopulateFromScopeDescription(localScopeDesc);
clientProvision.Apply();
SyncOrchestrator syncOrchestrator = new SyncOrchestrator();
syncOrchestrator.LocalProvider = new SqlSyncProvider(remoteProvisioningScopeName, localServerConn);
syncOrchestrator.RemoteProvider = new SqlSyncProvider(remoteProvisioningScopeName, remoteServerConn);    
syncOrchestrator.Direction = syncDirection;
((SqlSyncProvider)syncOrchestrator.LocalProvider).ApplyChangeFailed += new EventHandler<DbApplyChangeFailedEventArgs>(Program_ApplyChangeFailed);
SyncOperationStatistics syncStats = syncOrchestrator.Synchronize();