Я использую SQL CE 3.5, Microsoft.Synchronization.Data.SqlServerCe 3.1 и MSSQL 2008, и для каждой вставки я получаю одно и то же исключение с событием ApplyChangeFailed на ServerSyncProvider.
Я получил эту ошибку длякаждая вставка выполняется с синхронизацией: «Отслеживание изменений SQL Server очистило информацию отслеживания для таблицы '' ''% s '' ''. Чтобы устранить эту ошибку, клиент должен повторно инициализировать свою локальную базу данных и повторить попытку синхронизации." *
Я получил этот фрагмент SQL при вставке строки: «ЕСЛИ CHANGE_TRACKING_MIN_VALID_VERSION (object_id (N '' [TargetMetricValue] ''))> @sync_last_received_anchor RAISERROR (отслеживание изменений сервера N'SQL убрало информацию отслеживания для таблицы'' ''% s '' ''. Для восстановления после этой ошибки клиент должен повторно инициализировать свою локальную базу данных и попытаться снова выполнить синхронизацию. '', 16,3, N '' [TargetMetricValue] '') "и получил это: "@ sync_last_received_anchor = 0"
CHANGE_TRACKING_MIN_VALID_VERSION (object_id (N '' [TargetMetricValue] '')) returns 146113 и, поскольку оно больше 0, генерируется указанное выше исключение.
В методе класса ServerSyncProvider ApplyChanges вызывается => serverSyncProvider.ApplyChanges (groupMetadata, dataSet, syncSession);
groupMetanchor.Na.= null, groupMetadata.TablesMetadata [0] .LastReceivedAnchor.Anchor = null, groupMetadata.TablesMetadata [0] .LastSentAnchor.Ancor = byte [] {127,35,6,0,0,0,0,0}
Могу поспорить, что LastReceivedAnchor связан с sync_last_received_anchor, но я не получаю никакого действительного значения после вызова syncAgent.Synchronize ()
Также в методе SqlCeClientSyncProvider GetTableReceivedAnchor я получаю нулевое значение и для GetTableSentAchor35,6,0,0,0,0,0}.
Так что может не хватать, чтобы я получил null (0) для этого значения?
ОБНОВЛЕНИЕ в соответствии спервый комментарий:
У меня есть исходный файл базы данных CE xyz.sdf. Строка подключения объявлена в app.config как: 'add name = "localConnection" connectionString = "Data Source = | DataDirectory | \ Data \ xyz.sdf; максимальный размер базы данных = 3968 "providerName =" System.Data.SqlServerCe.3.5 "'
Инициализируется с помощью этого кода:
public SyncAgent()
{
systemTables = new List<string> {"__syncArticles", "__syncSubscriptions", "__syncTransactions"};
ClientSyncProvider = new SqlCeClientSyncProvider(ConfigurationManager.ConnectionStrings["localConnection"].ConnectionString, true);
LocalProvider = ClientSyncProvider;
InitializeAllSyncTables();
}