Отслеживание изменений 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.