В настоящее время мы используем Microsoft Sync Framework 2.1 для синхронизации данных между облачным решением и толстыми клиентами. Синхронизация инициируется клиентами и загружается только. Оба конца используют SQL Server, и я использую класс SqlSyncScopeProvisioning для предоставления областей. Мы не можем гарантировать, что клиенты будут использовать последнюю версию нашего программного обеспечения, но мы полностью контролируем облачную часть, и это всегда будет актуально.Сводная версия системы синхронизации
Мы рассматриваем возможность поддержки версий для областей, чтобы, например, изменить таблицу, чтобы иметь новый столбец, тогда я могу сохранить любую исходную область (например, «ScopeA_V1»), добавив еще одну область, которая охватывает все те же данные, что и первая область, но также и с новым столбцом (например, «ScopeA_V2»). Это позволит более старым версиям клиента продолжать синхронизацию до тех пор, пока они не будут обновлены.
Для этого я разрабатываю изменения модели данных определенным образом, так что я могу добавлять только столбцы и таблицы, никогда не удалять, а все новые столбцы должны быть нулевыми. В теории я думаю, что это должно позволить более старым версиям моих областей работать, даже если они не синхронизируют новые данные.
Я думаю, что я почти там, но я ударил камень преткновения. Когда я устанавливаю новые версии существующих областей, я получаю правильные копии версий хранимой процедуры SelectChanges, но все хранимые процедуры таблицы (не относящиеся к областям - например, tableA_update, tableA_delete и т. Д.) Не обновляются, как я думаю провайдер видит их как существующие и не думает, что они нуждаются в обновлении.
Есть ли способ, с помощью которого я могу получить средство обновления для обновления соответствующих хранимых процедур (_update, _insert и т. Д.), Чтобы он добавлял новые параметры для новых столбцов со значениями по умолчанию (null), позволяя как новым, так и старые версии областей для их использования?
Также, если я это сделаю, то когда клиент будет обновлен до новой версии, будет ли он повторно синхронизировать новые столбцы, даже если строки уже синхронизированы (хотя и с нулями в новых столбцах)?
Или я об этом совершенно неправильно? Есть ли другой способ сделать обратную связь обратно совместимыми со старыми версиями?
Thanks JuneT - ваши сообщения в блогах и ответы на вопросы были основой моей синхронизации! Да, я видел ваше сообщение об изменении области действия, но я надеялся, что когда речь заходит о предоставлении новой версии той же возможности, что класс SqlSyncScopeProvisioning предоставит мне то, что мне нужно. Я закончил делать клонирование вручную, используя ваш блог в качестве руководства. –
Может быть, я должен добавить одну проблему, с которой я столкнулся сейчас, так это то, что как только я предоставил более позднюю версию области, мне не удалось выяснить, как правильно клонировать знания из предыдущей версии области. Когда я пытаюсь выполнить синхронизацию, она снова синхронизируется, даже если я не сделал никаких изменений данных. Вы когда-нибудь писали это сообщение в блоге о том, как перебирать знания синхронизации? В очередной раз благодарим за помощь –