Condividi tramite


Procedura: specificare la sincronizzazione snapshot, di download, di caricamento e bidirezionale

Sync Framework supporta la sincronizzazione snapshot, di download, di caricamento e bidirezionale. Grazie alla flessibilità fornita da Sync Framework, è possibile specificare diversi tipi di sincronizzazione per le tabelle. Per ulteriori informazioni, vedere Architettura e classi per la sincronizzazione client e server.

Questo argomento fornisce una panoramica delle proprietà richieste per ogni tipo di sincronizzazione. Negli argomenti di questa sezione viene descritto come configurare i tipi di sincronizzazione e vengono forniti esempi di codice.

Argomenti della sezione

Proprietà che determinano la direzione di sincronizzazione

Il tipo di sincronizzazione utilizzato per una tabella dipende dai comandi di sincronizzazione impostati nella SyncAdapter e nella proprietà SyncDirection sulla SyncTable. I comandi di sincronizzazione determinano i dati che è possibile sincronizzare, mentre la proprietà SyncDirection stabilisce quali dati vengono effettivamente sincronizzati per una particolare sessione. In genere sono gli stessi: ad esempio, si specifica la sincronizzazione bidirezionale e i comandi per supportarla. Tuttavia, in alcuni casi è preferibile effettuare la sincronizzazione in un'unica direzione. Ad esempio, un venditore potrebbe richiedere un accesso di solo download ai dati dei prodotti, mentre un responsabile potrebbe richiedere anche la possibilità di aggiornare tali dati in remoto. È possibile specificare i comandi di SyncAdapter per la sincronizzazione bidirezionale. Tuttavia, la proprietà SyncDirection è impostata al solo download per il venditore.

Per specificare la direzione di sincronizzazione, impostare la SyncDirection su uno dei seguenti valori dell'enumerazione SyncDirection:

Specificare quindi manualmente per ogni tabella un set di comandi per la SyncAdapter, oppure generarli utilizzando SqlSyncAdapterBuilder. Per la sincronizzazione di solo download e bidirezionale, il server deve inoltre essere configurato per tenere traccia delle modifiche incrementali ai dati. Per ulteriori informazioni, vedere Rilevamento delle modifiche nel database server.

Se si creano manualmente dei comandi, impostare alcune o tutte le proprietà seguenti nella SyncAdapter:

  • SelectIncrementalInsertsCommand. Questa proprietà è utilizzata in tutti i tipi di sincronizzazione. Specifica il comando per recuperare dal database server gli inserimenti iniziali per la sincronizzazione snapshot, di solo download e bidirezionale e gli inserimenti incrementali per la sincronizzazione di solo download e bidirezionale. Per impostazione predefinita, il comando recupera dal database server anche lo schema di tabella, per tutti i tipi di sincronizzazione. La creazione dello schema e gli inserimenti vengono applicati al client dal SqlCeClientSyncProvider.

  • SelectIncrementalUpdatesCommand e SelectIncrementalDeletesCommand. Tali proprietà vengono utilizzate nella sincronizzazione di solo download e bidirezionale. Specificano i comandi che recuperano gli aggiornamenti e le eliminazioni dal server, in modo da applicarli al client mediante il SqlCeClientSyncProvider.

  • InsertCommand, UpdateCommand e DeleteCommand. Tali proprietà vengono utilizzate nella sincronizzazione di solo caricamento e bidirezionale. Le proprietà specificano i comandi che applicano al server gli inserimenti, gli aggiornamenti e le eliminazioni effettuati nel client.

  • SelectConflictUpdatedRowsCommand e SelectConflictDeletedRowsCommand. Tali proprietà vengono generalmente utilizzate nella sincronizzazione bidirezionale. Le proprietà specificano i comandi che recuperano i conflitti di aggiornamento ed eliminazione nel server. Per ulteriori informazioni, vedere Procedura: gestire conflitti di dati ed errori.

Uno dei vantaggi offerti dallo specificare manualmente i comandi di sincronizzazione è rappresentato dal maggiore controllo sui comandi e sui tipi di modifiche da caricare dal client. Ad esempio, se si desidera eseguire una sincronizzazione bidirezionale, senza però caricare le eliminazioni dal client, è sufficiente non specificare alcun comando per la proprietà DeleteCommand. Per un esempio dei comandi manuali più complessi rispetto a quelli generati dal SqlSyncAdapterBuilder, vedere Procedura: gestire conflitti di dati ed errori.

Se l'oggetto SqlSyncAdapterBuilder genera i comandi, impostare la proprietà SyncDirection. Tale proprietà determina quale comando di SyncAdapter generare per una tabella. Per la sincronizzazione snapshot o di solo caricamento, non è necessario effettuare ulteriori impostazioni. Per la sincronizzazione di solo download e bidirezionale, è richiesta anche l'impostazione di proprietà che identificano le colonne da utilizzare nel server per il rilevamento delle modifiche e se filtrare o meno i dati. Le proprietà sono le seguenti:

In base alle colonne e ai valori di filtro specificati per queste proprietà, SqlSyncAdapterBuilder genera i comandi appropriati.

Modifica della direzione di sincronizzazione

Dopo che una tabella è stata sincronizzata, è possibile specificare una direzione di sincronizzazione diversa. Tuttavia, per la sincronizzazione snapshot non è possibile attivare il rilevamento delle modifiche nel database client. Se si prevede che un'applicazione possa richiedere il rilevamento delle modifiche ai dati, si consiglia di non configurare la sincronizzazione snapshot. Se si configura la sincronizzazione snapshot per poi passare a un altro tipo di sincronizzazione, è necessario tenere conto delle seguenti problematiche relative al rilevamento delle modifiche:

  • Se è stata configurata la sincronizzazione snapshot e quindi si passa alla sincronizzazione di solo download o bidirezionale:

    Le righe dal lato server potrebbero essere nuovamente selezionate e scaricate. Ciò potrebbe creare conflitti durante la fase di download.

  • Se è stata configurata la sincronizzazione snapshot, vengono eseguite modifiche nel database client e quindi si passa alla sincronizzazione di solo caricamento o bidirezionale:

    Le modifiche eseguite nel database client non vengono caricate. Se è richiesto il caricamento delle modifiche, è necessario eseguire un aggiornamento fittizio per ogni riga modificata.

  • Se è stata configurata la sincronizzazione snapshot, si passa alla sincronizzazione di solo caricamento o bidirezionale e quindi vengono eseguite modifiche nel database client:

    Si possono verificare conflitti durante la fase di caricamento.

Vedere anche

Concetti

Programmazione di attività comuni di sincronizzazione client e server
Strumenti che facilitano lo sviluppo di applicazioni