2012-03-19 5 views
0

В настоящее время мы используем Microsoft Sync Framework 2.1 для синхронизации данных между облачным решением и толстыми клиентами. Синхронизация инициируется клиентами и загружается только. Оба конца используют SQL Server, и я использую класс SqlSyncScopeProvisioning для предоставления областей. Мы не можем гарантировать, что клиенты будут использовать последнюю версию нашего программного обеспечения, но мы полностью контролируем облачную часть, и это всегда будет актуально.Сводная версия системы синхронизации

Мы рассматриваем возможность поддержки версий для областей, чтобы, например, изменить таблицу, чтобы иметь новый столбец, тогда я могу сохранить любую исходную область (например, «ScopeA_V1»), добавив еще одну область, которая охватывает все те же данные, что и первая область, но также и с новым столбцом (например, «ScopeA_V2»). Это позволит более старым версиям клиента продолжать синхронизацию до тех пор, пока они не будут обновлены.

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

Я думаю, что я почти там, но я ударил камень преткновения. Когда я устанавливаю новые версии существующих областей, я получаю правильные копии версий хранимой процедуры SelectChanges, но все хранимые процедуры таблицы (не относящиеся к областям - например, tableA_update, tableA_delete и т. Д.) Не обновляются, как я думаю провайдер видит их как существующие и не думает, что они нуждаются в обновлении.

Есть ли способ, с помощью которого я могу получить средство обновления для обновления соответствующих хранимых процедур (_update, _insert и т. Д.), Чтобы он добавлял новые параметры для новых столбцов со значениями по умолчанию (null), позволяя как новым, так и старые версии областей для их использования?

Также, если я это сделаю, то когда клиент будет обновлен до новой версии, будет ли он повторно синхронизировать новые столбцы, даже если строки уже синхронизированы (хотя и с нулями в новых столбцах)?

Или я об этом совершенно неправильно? Есть ли другой способ сделать обратную связь обратно совместимыми со старыми версиями?

ответ

1

Sync Framework вне коробки не поддерживает обновление определений областей для размещения изменений схемы. и создание новой области с помощью SetCreateProceduresForAdditionalScopeDefault создадут только новую область и новую _selectchanges хранимую процедуру, но будут повторно использовать все остальные хранимые процедуры, таблицы отслеживания, триггеры и UDT.

я написал серию сообщений в блоге о том, что нужно изменить, чтобы приспособить схему изменения здесь: http://jtabadero.wordpress.com/2011/03/21/modifying-sync-framework-scope-definition-part-1-introduction/

последующие сообщения на который показывает несколько способов взлома скриптов инициализации.

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

+0

Thanks JuneT - ваши сообщения в блогах и ответы на вопросы были основой моей синхронизации! Да, я видел ваше сообщение об изменении области действия, но я надеялся, что когда речь заходит о предоставлении новой версии той же возможности, что класс SqlSyncScopeProvisioning предоставит мне то, что мне нужно. Я закончил делать клонирование вручную, используя ваш блог в качестве руководства. –

+0

Может быть, я должен добавить одну проблему, с которой я столкнулся сейчас, так это то, что как только я предоставил более позднюю версию области, мне не удалось выяснить, как правильно клонировать знания из предыдущей версии области. Когда я пытаюсь выполнить синхронизацию, она снова синхронизируется, даже если я не сделал никаких изменений данных. Вы когда-нибудь писали это сообщение в блоге о том, как перебирать знания синхронизации? В очередной раз благодарим за помощь –

Смежные вопросы