Microsoft Sync Framework-记录更新

时间:2019-05-15 13:39:26

标签: c# sql-server microsoft-sync-framework

我正在使用Microsoft Sync Framework来同步两个SQLServer数据库。我创建了同步作用域并将其应用于数据库。在第一次同步期间,源数据库中的所有记录均已在目标数据库中正确创建。如果我添加新记录或更新现有记录,则同步框架还将更改应用于我的目标数据库。现在,我想通过添加另一列来更改同步范围。为了实现这一目标,我删除了现有范围,并创建了一个新的范围,并添加了其他列。像以前一样,同步可以应用每条新记录,但是我在更新现有记录时发现了一些问题。由于我添加了新的同步作用域,因此记录更新仅适用于添加新作用域之后创建的记录,但是旧记录将被忽略。

SyncOrchestrator返回同步统计信息,在这里我可以看到行数,在其中可以跟踪检测到的更改。 例如:如果我更改了2条记录,则在“新”作用域之后添加了2条记录,而在“之前”添加了2条记录,则统计信息返回:检测到4条更改,应用了4条更改。但是在数据库中,我仅看到应用新作用域后创建的2条记录中的更改。

这是同步平台的正确行为吗?有什么办法可以更新现有记录吗?


private static void CreateScope(string scope, SqlConnection devConnection, SqlConnection prodConnection)
       {
            Collection<string> customerColumns = new Collection<string>() { "ID", "Email", "Name" };

            DbSyncScopeDescription customersScope = new DbSyncScopeDescription(scope);

            DbSyncTableDescription customersTableDesc = SqlSyncDescriptionBuilder.GetDescriptionForTable("Customers", customerColumns, devConnection);
            customersScope.Tables.Add(customersTableDesc);


            SqlSyncScopeProvisioning devProvisioning = new SqlSyncScopeProvisioning(devConnection, customersScope);
            devProvisioning.Apply();

            DbSyncScopeDescription scopeDescription = SqlSyncDescriptionBuilder.GetDescriptionForScope(scope, devConnection);
            SqlSyncScopeProvisioning productionProvisioning = new SqlSyncScopeProvisioning(prodConnection, scopeDescription);

            productionProvisioning.Apply();
        }

private static void DeleteScope(string scope, SqlConnection devConnection, SqlConnection prodConnection)
        {
            SqlSyncScopeDeprovisioning sqlSyncScopeDeprovisioning = new SqlSyncScopeDeprovisioning(devConnection);
            sqlSyncScopeDeprovisioning.DeprovisionScope(scope);

            SqlSyncScopeDeprovisioning sqlSyncScopeDeprovisioning2 = new SqlSyncScopeDeprovisioning(prodConnection);
            sqlSyncScopeDeprovisioning2.DeprovisionScope(scope);
        }

private static void Synchronize(string scope, SqlConnection devConnection, SqlConnection prodConnection)
        {
            SyncOrchestrator syncOrchestrator = new SyncOrchestrator();
            syncOrchestrator.Direction = SyncDirectionOrder.Download;
            syncOrchestrator.RemoteProvider = new SqlSyncProvider(scope, devConnection);
            syncOrchestrator.LocalProvider = new SqlSyncProvider(scope, prodConnection);

            var x = syncOrchestrator.Synchronize();
        }

0 个答案:

没有答案