Share via


Como especificar sincronização de instantâneo, de download, de carregamento e bidirecional

O Sync Framework oferece suporte à sincronização de instantâneo, download, upload e bidirecional. Devido à flexibilidade que o Sync Framework fornece, você pode especificar tipos diferentes de sincronização para tabelas diferentes. Para obter mais informações, consulte Arquitetura e classes para sincronização entre cliente e servidor.

Este tópico fornece uma visão geral das propriedades exigidas para cada tipo de sincronização. Os tópicos desta seção descrevem como configurar os tipos de sincronização e apresentam exemplos de código.

Nesta seção

Propriedades que determinam a direção da sincronização

O tipo de sincronização usada para uma tabela depende dos comandos de sincronização definidos nas propriedades SyncAdapter e SyncDirection na SyncTable. Os comandos de sincronização determinam quais dados podem ser sincronizados, e a propriedade SyncDirection determina quais dados estão realmente sincronizados para uma determinada sessão. Em geral, esses dados são iguais. Por exemplo, você especifica a sincronização bidirecional e os respectivos comandos que dão suporte a ela. No entanto, em alguns casos, talvez você queira sincronizar em apenas uma direção. Por exemplo, um vendedor pode necessitar de acesso somente para download a dados do produto, enquanto um gerente também pode precisar da capacidade de atualizar esses dados remotamente. Os comandos SyncAdapter podem ser especificados para a sincronização bidirecional. No entanto, a propriedade SyncDirection é definida como somente para download para o vendedor.

Para especificar a direção da sincronização, defina a propriedade SyncDirection para um dos seguintes valores da enumeração SyncDirection:

Em seguida, para cada tabela, especifique manualmente um conjunto de comandos para SyncAdapter ou use SqlSyncAdapterBuilder para gerar esses comandos. Para as sincronizações bidirecional e somente para download, o servidor também deve ser configurado para controlar as alterações de dados incrementais. Para obter mais informações, consulte Controlando alterações no banco de dados do servidor.

Se você criar manualmente os comandos, você definirá alguma ou todas as propriedades em SyncAdapter:

  • SelectIncrementalInsertsCommand. Esta propriedade é usada em todos os tipos de sincronização. A propriedade especifica o comando que recupera do banco de dados do servidor: as inserções iniciais para sincronização de instantâneo, somente para download e bidirecional; e as inserções incrementais para sincronização somente para download e bidirecional. Por padrão, o comando também recupera o esquema de tabelas do banco de dados do servidor para todos os tipos de sincronização. As inserções e a criação do esquema são aplicadas ao cliente pelo SqlCeClientSyncProvider.

  • SelectIncrementalUpdatesCommand e SelectIncrementalDeletesCommand. Essas propriedades são usadas nas sincronizações somente para download e bidirecional. As propriedades especificam os comandos que recuperam atualizações e exclusões no servidor para que as atualizações e exclusões possam ser aplicadas ao cliente pelo SqlCeClientSyncProvider.

  • InsertCommand, UpdateCommand e DeleteCommand. Essas propriedades são usadas nas sincronizações somente para upload e bidirecional. As propriedades especificam os comandos que aplicam as inserções, atualizações e exclusões feitas no cliente para o servidor.

  • SelectConflictUpdatedRowsCommand e SelectConflictDeletedRowsCommand. Essas propriedades geralmente são usadas na sincronização bidirecional. As propriedades especificam os comandos que recuperam os conflitos de exclusão e atualização no servidor. Para obter mais informações, consulte Como tratar conflitos de dados e erros.

Uma das vantagens de especificar os comandos de sincronização manualmente é que você tem mais controle sobre os comandos e sobre quais tipos de alterações são carregadas a partir do cliente. Por exemplo, se você quiser executar a sincronização bidirecional, mas você não quiser carregar as exclusões a partir do cliente, não especifique um comando para a propriedade DeleteCommand. Para obter um exemplo dos comandos manuais mais complexos do que aqueles gerados por SqlSyncAdapterBuilder, consulte Como tratar conflitos de dados e erros.

Se o SqlSyncAdapterBuilder gerar os comandos, defina a propriedade SyncDirection. Essa propriedade determina qual dos comandos SyncAdapter deve ser gerado para uma tabela. Para a sincronização de instantâneo ou somente para upload, isso é tudo o que deve ser configurado. Para as sincronizações bidirecional e somente para download, você também deve definir as propriedades que identificam quais colunas no servidor são usadas para controlar as alterações e se os dados devem ser filtrados. Essas propriedades são as seguintes:

Com base nos valores de filtro e colunas especificados para essas propriedades, o SqlSyncAdapterBuilder gera os comandos adequados.

Alterando a direção da sincronização

Após a sincronização de uma tabela, você pode especificar uma direção de sincronização diferente. No entanto, a sincronização de instantâneo não permite o controle de alterações no banco de dados do cliente. Se você previr que um aplicativo exigirá o controle de alterações de dados no mesmo ponto, recomendamos que você não configure a sincronização de instantâneo. Se você configurar a sincronização de instantâneo e, em seguida, mude para outro tipo de sincronização, deverá estar ciente dos seguintes problemas relacionados ao controle de alterações:

  • Se você tiver a sincronização de instantâneo configurada e alterar para sincronização somente para download ou bidirecional:

    As linhas do servidor podem ser selecionadas e baixadas novamente. Isso pode causar conflitos durante a fase de download.

  • Se você tiver a sincronização de instantâneo configurada, faça alterações no banco de dados do cliente e altere para sincronização somente para upload ou bidirecional:

    Quaisquer alterações feitas no banco de dados do cliente não serão carregadas. Se precisar que as alterações sejam carregadas, será necessário executar uma atualização fictícia de cada linha alterada.

  • Se você tiver a sincronização de instantâneo configurada, altere para sincronização somente para upload ou bidirecional e faça alterações no banco de dados do cliente:

    Podem ocorrer conflitos durante a fase de upload.

Consulte também

Conceitos

Programando tarefas comuns de sincronização do cliente e do servidor
Ferramentas para ajudar no desenvolvimento de aplicativos