Управление версиями в Sync Framework Scope - PullRequest
0 голосов
/ 19 марта 2012

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

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

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

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

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

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

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

1 Ответ

1 голос
/ 19 марта 2012

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

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

...