Sync Framework: Можно ли синхронизировать только часть моих таблиц?
Обычный фрагмент кода для синхронизации данных с платформой синхронизации:
LocalDBSyncAgent syncAgent = new LocalDBSyncAgent();
Microsoft.Synchronization.Data.SyncStatistics syncStats = syncAgent.Synchronize();
У кого-нибудь есть способ синхронизации подмножества моих таблиц. Обратите внимание не на данные внутри каждой таблицы, но решите, какие таблицы будут задействованы в синхронизации.
Спасибо ариэль
2 ответа
Да, вы можете.
Создайте SyncTable для каждой таблицы, которую вы хотите синхронизировать, и добавьте ее в Configuration.SyncTables в SyncAgent.
Я нашел эту статью от Билла Райана очень поучительной. Он рассказывает, как фильтровать данные в каждой таблице, но там есть вещи, которые делают то, что вы ищете.
Образец от Билла Райана:
public class SampleSyncAgent : Microsoft.Synchronization.SyncAgent
{
public SampleSyncAgent()
{
SqlCeClientSyncProvider clientSyncProvider = new SqlCeClientSyncProvider(Properties.Settings.Default.ClientConnString, true);
this.LocalProvider = clientSyncProvider;
clientSyncProvider.ChangesApplied += new EventHandler<ChangesAppliedEventArgs>(clientSyncProvider_ChangesApplied);
this.RemoteProvider = new SampleServerSyncProvider();
SyncTable customerSyncTable = new SyncTable("Customer");
customerSyncTable.CreationOption = TableCreationOption.DropExistingOrCreateNewTable;
customerSyncTable.SyncDirection = SyncDirection.DownloadOnly;**
this.Configuration.SyncTables.Add(customerSyncTable);
this.Configuration.SyncParameters.Add(new SyncParameter("@CustomerName", "Sharp Bikes"));
}
}
В Sync Framework 2.0 появилось несколько новых провайдеров синхронизации, связанных с базой данных, которые имеют ряд преимуществ по сравнению с ранее доступными (см. Раздел Сравнение типов провайдеров здесь). С их помощью вы можете указать, что подмножество таблиц должно быть синхронизировано путем создания DbSyncScopeDescription, которая содержит DbSyncTableDescription только для тех таблиц, которые вы хотите синхронизировать.
Вы заявили выше, что не заинтересованы в фильтрации данных, но, вероятно, здесь стоит упомянуть, что DbSyncScopeDescription также содержит информацию о фильтрации.