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