Как задать синхронизацию моментальными снимками, с загрузкой, с передачей и двунаправленную

Платформа Sync Framework поддерживает синхронизацию моментальными снимками, с загрузкой, с передачей и двунаправленную. Благодаря своей гибкости платформа Sync Framework позволяет задать для разных таблиц различные типы синхронизации. Дополнительные сведения см. в разделе Архитектура и классы для синхронизации клиента и сервера.

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

В этом разделе

Свойства, определяющие направление синхронизации

Тип синхронизации, используемый для таблицы, зависит от команд синхронизации, заданных в SyncAdapter и в свойстве SyncDirection объекта SyncTable. Команды синхронизации указывают, какие данные подлежат синхронизации, а свойство SyncDirection определяет, какие данные будут синхронизированы в конкретном сеансе. Часто это одни и те же данные. Например, можно задать двунаправленную синхронизацию и команды для ее поддержки. Но в некоторых случаях синхронизация должна выполняться только в одном направлении. Например, продавцу может быть необходим доступ только к загрузке данных о продукте, а менеджеру — возможность их дистанционного обновления. Команды SyncAdapter могут быть указаны для двунаправленной синхронизации, а свойство SyncDirection для продавца может разрешать только загрузку.

Чтобы задать направление синхронизации, присвойте свойству SyncDirection одно из следующих значений из перечисления SyncDirection:

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

При создании вручную команд для SyncAdapter должны быть заданы некоторые (или все) из следующих свойств:

  • SelectIncrementalInsertsCommand. Это свойство используется для всех типов синхронизации. Оно указывает команду для получения данных из базы данных сервера: исходные операции вставки для синхронизации моментальных снимков, синхронизации только с загрузкой и двунаправленной синхронизации; добавочные операции вставки для синхронизации только с загрузкой и двунаправленной синхронизации. По умолчанию для всех видов синхронизации эта команда также получает схему таблицы из базы данных сервера. Класс SqlCeClientSyncProvider создает схему и применяет к клиенту операции вставки.

  • SelectIncrementalUpdatesCommand и SelectIncrementalDeletesCommand. Эти свойства используются только в синхронизации с загрузкой и двунаправленной синхронизации. Они задают команды для получения операций обновления и удаления на сервере, которые класс SqlCeClientSyncProvider применяет на клиенте.

  • InsertCommand, UpdateCommand и DeleteCommand. Эти свойства используются только в синхронизации с передачей и двунаправленной синхронизации. Они задают команды, которые применяют на сервере операции вставки, обновления и удаления, произведенные на клиенте.

  • SelectConflictUpdatedRowsCommand и SelectConflictDeletedRowsCommand. Эти свойства обычно используются при двунаправленной синхронизации. Они задают команды для получения конфликтов операций обновления и удаления на сервере. Дополнительные сведения см. в разделе Как обрабатывать конфликты и ошибки в данных.

Одно из преимуществ задания команд вручную заключается в том, что это обеспечивает большую степень контроля над командами и типами изменений, передаваемых от клиента. Например, если необходимо выполнить двунаправленную синхронизацию, но нежелательно передавать от клиента операции удаления, достаточно не указывать команду в свойстве DeleteCommand. Примеры подготовки вручную более сложных команд, чем команды, формируемые при помощи класса SqlSyncAdapterBuilder, см. в разделе Как обрабатывать конфликты и ошибки в данных.

Если команды формируются классом SqlSyncAdapterBuilder, присвойте значение свойству SyncDirection. Это свойство определяет, какие из команд SyncAdapter должны быть созданы для таблицы. Для синхронизации моментальными снимками и синхронизации с передачей можно определить только это свойство. Для синхронизации только с загрузкой и двунаправленной синхронизации необходимо также указать столбцы на сервере, используемые для отслеживания изменений, а также определить необходимость фильтрации данных. Это следующие свойства:

Исходя из указанных в этих свойствах столбцов и значений фильтра, класс SqlSyncAdapterBuilder формирует соответствующие команды.

Изменение направления синхронизации

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

  • Если используется синхронизация при помощи моментальных снимков, а затем выполняется переход к синхронизации только с загрузкой или двунаправленной синхронизации, то

    строки со стороны сервера могут быть выбраны и загружены повторно. Это может вызвать конфликты на этапе загрузки.

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

    Любые изменения, произведенные в клиентской базе данных, не передаются на сервер. Если необходимо передать изменения на сервер, то для каждой изменившейся строки следует выполнить фиктивное обновление.

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

    На этапе передачи на сервер могут возникнуть конфликты.

См. также

Другие ресурсы

Программирование распространенных задач синхронизации клиента и сервера

Средства для облегчения разработки приложений