SQL更改跟踪和Microsoft Sync Framework

时间:2016-02-23 17:12:21

标签: c# sql-server database microsoft-sync-framework change-tracking

我是数据库和SQL的新手,我正在努力了解SQL Change TrackingMicrosoft Sync Framework如何协同工作。

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

    // 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"的表。这是跟踪更改的另一个表,实际上它确实如此,每当我在数据库中更改某些内容时,_tracking都会使用我更改,添加或删除的元素进行更新。 Change Tracking不会自动同步我的数据库,只是跟踪它们的变化,这是为了什么目的?

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

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

1 个答案:

答案 0 :(得分:0)

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

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

如果您希望数据库执行同步,则可能需要检查SQL Replication。