SQL 更改跟踪和 Microsoft 同步框架

SQL Change Tracking and Microsoft Sync Framework

我对数据库和 SQL 有点陌生,我正在努力理解 SQL Change TrackingMicrosoft Sync Framework 如何协同工作。

我找不到一些关于如何与 Microsoft Sync Framework 同步数据库的清晰示例,但希望我找到了 this 站点,修改了代码并在我的两个数据库上同步工作,这是我得到的代码:

    // Server connection
    using (SqlConnection serverConn = new SqlConnection(serverConnectionString))
    {
        if (serverConn.State == ConnectionState.Closed)
            serverConn.Open();

        // Client connection
        using (SqlConnection clientConn = new SqlConnection(clientConnectionString))
        {
            if (clientConn.State == ConnectionState.Closed)
                clientConn.Open();

            const string scopeName = "DifferentPKScope";

            // Provision Server
            var serverProvision = new SqlSyncScopeProvisioning(serverConn);
            if (!serverProvision.ScopeExists(scopeName))
            {
                var serverScopeDesc = new DbSyncScopeDescription(scopeName);
                var serverTableDesc = SqlSyncDescriptionBuilder.GetDescriptionForTable(table, serverConn);

                // Add the table to the descriptor
                serverScopeDesc.Tables.Add(serverTableDesc);

                serverProvision.PopulateFromScopeDescription(serverScopeDesc);
                serverProvision.Apply();
            }

            // Provision Client
            var clientProvision = new SqlSyncScopeProvisioning(clientConn);
            if (!clientProvision.ScopeExists(scopeName))
            {
                var clientScopeDesc = new DbSyncScopeDescription(scopeName);
                var clientTableDesc = SqlSyncDescriptionBuilder.GetDescriptionForTable(table, clientConn);

                // Add the table to the descriptor
                clientScopeDesc.Tables.Add(clientTableDesc);

                clientProvision.PopulateFromScopeDescription(clientScopeDesc);
                clientProvision.SetCreateTrackingTableDefault(DbSyncCreationOption.CreateOrUseExisting);
                clientProvision.Apply();
            }

            // Create the sync orchestrator
            var syncOrchestrator = new SyncOrchestrator();

            // Setup providers
            var localProvider = new SqlSyncProvider(scopeName, clientConn);
            var remoteProvider = new SqlSyncProvider(scopeName, serverConn);

            syncOrchestrator.LocalProvider = localProvider;
            syncOrchestrator.RemoteProvider = remoteProvider;

            // Set the direction of sync session
            syncOrchestrator.Direction = direction;

            // Execute the synchronization process
            return syncOrchestrator.Synchronize();
        }
    }

因此,通过这种方式,任何更改都会在我的两个数据库之间同步。但是我想要一种方法让我的 C# 应用程序在发生变化时自动同步两个数据库,所以我找到了一个叫做 Change Tracking here 的东西。我下载了提供 SynchronizationHelper 的示例代码,它还在我名为 "{TableName}_tracking" 的数据库中创建了 table。这是另一个跟踪更改的 table,事实上,每当我更改数据库中的某些内容时,_tracking 都会使用我更改、添加或删除的元素进行更新。 Change Tracking 不会自动同步我的数据库,它只是跟踪其中的更改,这样做的目的是什么?

对于第一个代码,同步有效但没有创建 _tracking table,它是否只是同步 table 中的所有内容,无论发生什么变化?如果是这样,对于大型数据库我应该使用 Change Tracking

也许这是微不足道的事情,但我一直在谷歌搜索和测试大量代码,但找不到明确的答案。

当您安装 Sync Framework 时,它会附带一个帮助文件,其中包含多个同步数据库的演练。您提到的第一个 link 和第二个使用相同的同步提供程序,并且它们都有跟踪表。 Sync Framework 支持使用内置的 SQL 更改跟踪功能或使用 Sync Framework 自己创建的自定义功能(_tracking)。

Sync Framework 位于您的数据库之外,您需要调用它才能触发同步。 Change Tracking 就是它所说的 - 跟踪更改。

如果您希望数据库进行同步,您可能需要检查 SQL 复制。