Отслеживание изменений SQL и Microsoft Sync Framework

Я вроде новичок с базами данных и SQL, и я пытаюсь понять, как SQL Change Tracking а также Microsoft Sync Framework работать вместе.

Я не смог найти четких примеров того, как синхронизировать базы данных с Microsoft Sync Framework но, надеюсь, я нашел этот сайт, изменил код и получил синхронизацию, работающую на двух моих базах данных, вот код, который я получил:

    // 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 здесь Я скачал пример кода, который обеспечивает SynchronizationHelper который также создает таблицы в моих базах данных под названием "{TableName}_tracking", Это еще одна таблица, которая отслеживает изменения, и действительно, когда я что-то изменяю в своей базе данных, _tracking обновляется с элементами, которые я изменил, добавил или удалил. Change Tracking не синхронизирует мои базы данных автоматически, он просто отслеживает изменения в них, какова цель этого?

С первым кодом синхронизация работает но нет _tracking таблица создана, она просто синхронизирует все в таблице независимо от того, что изменилось? Если это так, для больших баз данных я должен использовать Change Tracking?

Может быть, это что-то тривиально, но я гуглил и тестировал много кода, но не могу найти четкого ответа.

1 ответ

Решение

Когда вы устанавливаете Sync Framework, он поставляется с файлом справки, который содержит несколько пошаговых инструкций по синхронизации баз данных. первая ссылка, на которую вы ссылались, а вторая использует одного и того же поставщика синхронизации, и у них обеих есть таблицы отслеживания. Sync Framework поддерживает использование встроенной функции отслеживания изменений SQL или использование пользовательской функции, которую Sync Framework создает самостоятельно (_tracking).

Sync Framework находится за пределами вашей базы данных, и вам нужно вызвать ее для запуска синхронизации. Отслеживание изменений - это то, что он говорит - отслеживание изменений.

если вы хотите, чтобы ваши базы данных выполняли синхронизацию, вы можете вместо этого проверить репликацию SQL.

Другие вопросы по тегам