Partager via


Procédure pas à pas : extension du cache de base de données locale pour prendre en charge la synchronisation bidirectionnelle

Dans Visual Studio 2008, le cache de base de données locale configure une base de données SQL Server Compact et un ensemble de classes partielles qui activent Sync Framework. Dans la mesure où Visual Studio génère des classes partielles, vous pouvez écrire du code pour ajouter des fonctions de synchronisation et être toujours en mesure d'afficher et de modifier des paramètres dans la boîte de dialogue Configurer la synchronisation des données. Pour plus d'informations sur le cache de base de données locale et les classes partielles, consultez la documentation de Visual Studio 2008.

Par défaut, la boîte de dialogue Configurer la synchronisation des données vous permet de configurer Sync Framework pour des scénarios de téléchargement uniquement. En d'autres termes, après avoir configuré la synchronisation des données, l'appel à Synchronize ne téléchargera que les modifications du serveur sur la base de données client. L'une des façons les plus courantes d'étendre le code de synchronisation consiste à configurer la synchronisation bidirectionnelle. Vous pouvez ainsi télécharger les modifications du client sur le serveur. Pour activer la synchronisation bidirectionnelle, nous vous conseillons d'étendre le code généré comme suit :

  • Définissez la direction de la synchronisation comme bidirectionnelle.

  • Ajoutez du code pour gérer les conflits de synchronisation.

  • Supprimez les colonnes de suivi serveur des commandes de synchronisation.

Notes

Visual Studio 2008 utilise Sync Framework for ADO.NET 1.0 lorsqu'il génère le code pour le cache de base de données locale.

Configuration requise

Avant de démarrer cette procédure pas à pas, vous devez effectuer la procédure pas à pas suivante de la documentation de Visual Studio 2008 : « Procédure pas à pas : création d'une application occasionnellement connectée ». Une fois cette procédure terminée, vous disposez d'un projet qui contient un cache de base de données locale et une application Windows Form qui vous permet de télécharger les modifications de la table Northwind Customers vers une base de données SQL Server Compact. Vous êtes à présent prêt à charger cette solution de procédure pas à pas et à ajouter des fonctions bidirectionnelles.

Pour ouvrir la solution OCSWalkthrough

  1. Ouvrez Visual Studio.

  2. Dans le menu Fichier, ouvrez une solution ou un projet existant et recherchez la solution OCSWalkthrough. Il s'agit du fichier OCSWalkthrough.sln.

Définition de la direction de la synchronisation

La boîte de dialogue Configurer la synchronisation des données affecte à la propriété SyncDirection la valeur DownloadOnly ou Snapshot. Pour activer la synchronisation bidirectionnelle, affectez à la propriété SyncDirection la valeur Bidirectional pour chaque table à activer pour le téléchargement des modifications.

Pour définir la direction de la synchronisation

  1. Cliquez avec le bouton droit sur NorthwindCache.sync, puis sélectionnez Afficher le code. Lorsque vous effectuez cette opération pour la première fois, Visual Studio crée un fichier de classe NorthwindCache sous le nœud NorthwindCache.sync dans l'Explorateur de solutions. Ce fichier contient une classe partielle NorthwindCacheSyncAgent et vous pouvez ajouter d'autres classes si nécessaire.

  2. Dans le fichier de classe NorthwindCache, ajoutez une ligne de code à la méthode NorthwindCacheSyncAgent.OnInitialized() :

    public partial class NorthwindCacheSyncAgent 
    {   
        partial void OnInitialized()
        {
            this.Customers.SyncDirection = 
                Microsoft.Synchronization.Data.SyncDirection.Bidirectional;
        }
    }
    
    Partial Public Class NorthwindCacheSyncAgent
    
        Partial Sub OnInitialized()
    
            Me.Customers.SyncDirection = Microsoft.Synchronization.Data.SyncDirection.Bidirectional
    
        End Sub
    
    End Class
    
  3. Ouvrez Form1 dans l'éditeur de code.

  4. Dans le fichier Form1, modifiez la ligne de code dans le gestionnaire d'événements SynchronizeButton_Click afin d'inclure des statistiques de téléchargement ascendant et descendant :

    MessageBox.Show("Changes downloaded: " +
        syncStats.TotalChangesDownloaded.ToString() + 
        Environment.NewLine +
        "Changes uploaded: " + syncStats.TotalChangesUploaded.ToString());
    
        MessageBox.Show("Changes downloaded: " & _
    syncStats.TotalChangesDownloaded.ToString & Environment.NewLine & "Changes uploaded: " & _
    syncStats.TotalChangesUploaded.ToString)
    

Pour synchroniser et afficher les statistiques

  1. Appuyez sur F5.

  2. Dans le formulaire, mettez à jour un enregistrement, puis cliquez sur le bouton Enregistrer de la barre d'outils.

  3. Cliquez sur Synchroniser maintenant.

  4. Une zone de message qui contient des informations sur les enregistrements synchronisés s'affiche. Les statistiques indiquent qu'une ligne a fait l'objet d'un téléchargement ascendant et une autre d'un téléchargement, même si aucune modification n'a été apportée sur le serveur. Le téléchargement supplémentaire se produit, car les modifications du client lui sont retournées une fois qu'elles ont été appliquées au serveur. Pour plus d'informations, consultez « Identification du client ayant effectué une modification de données » dans Procédure : utiliser un système de suivi des modifications personnalisé.

  5. Cliquez sur OK pour fermer la zone de message, mais laisser l'exécution de l'application se poursuivre.

Pour synchroniser et afficher la résolution des conflits

  1. Dans le formulaire, mettez à jour un enregistrement, puis cliquez sur le bouton Enregistrer.

  2. Alors que l'application est toujours en cours d'exécution, utilisez l'Explorateur de serveurs/Explorateur de bases de données (ou un autre outil d'administration de base de données) pour vous connecter à la base de données serveur.

  3. Pour illustrer le comportement par défaut pour la résolution des conflits, dans l'Explorateur de serveurs/Explorateur de bases de données, mettez à jour le même enregistrement que dans le formulaire, mais avec une valeur différente, puis validez la modification. (Sortez de la ligne modifiée.)

  4. Revenez au formulaire, puis cliquez sur Synchroniser maintenant.

  5. Vérifiez la mise à jour dans la grille de l'application et la base de données serveur. Notez que la mise à jour effectuée sur le serveur a remplacé celle sur le client. Pour plus d'informations sur la modification de ce comportement de résolution des conflits, consultez la section suivante de cette rubrique, « Ajout de code pour gérer les conflits de synchronisation ».

Ajout de code pour gérer les conflits de synchronisation

Dans Sync Framework, une ligne est en conflit lorsqu'elle a été modifiée à la fois sur le client et le serveur entre les synchronisations. Sync Framework offre un ensemble de fonctionnalités permettant de détecter et de résoudre les conflits. Dans cette procédure pas à pas, vous ajoutez une gestion de base pour les conflits dans lesquels la même ligne a été mise à jour à la fois sur le client et le serveur. D'autres types de conflits présentent une ligne supprimée dans une base de données et mise à jour dans une autre, ou des lignes avec des clés primaires en double insérées dans les deux bases de données. Pour plus d'informations sur la détection et la résolution des conflits, consultez Procédure : gérer les conflits de données et les erreurs.

Pour ajouter la gestion des conflits

  • Ajoutez du code pour gérer l'événement ApplyChangeFailed serveur et l'événement ApplyChangeFailed client. Ces événements sont déclenchés lorsqu'une ligne ne peut pas être appliquée en raison d'un conflit ou d'une erreur. Les méthodes qui gèrent ces événements dans l'exemple de code vérifient le type de conflit et indiquent que les conflits client-mise à jour/serveur-mise à jour doivent être résolus en imposant l'écriture de la modification du client dans la base de données serveur. La commande de synchronisation qui applique les mises à jour à la base de données serveur inclut une logique pour identifier le moment où une modification doit être imposée. Cette commande figure dans le code de la section suivante de cette rubrique, « Suppression des colonnes de suivi serveur des commandes de synchronisation ».

    Notes

    L'exemple de code fournit un exemple de base de gestion des conflits. La façon dont vous gérez les conflits dépend de la configuration requise de votre application et de la logique métier.

    Le mode d'ajout de code pour C# est différent de Visual Basic :

    • Pour C#, ajoutez du code à NorthwindCache.cs et Form1.cs. Dans NorthwindCache.cs, ajoutez le code suivant à la fin de la classe NorthwindCacheSyncAgent :

      public partial class NorthwindCacheServerSyncProvider
      {
      
          partial void OnInitialized()
          {
              this.ApplyChangeFailed +=
                  new System.EventHandler<Microsoft.Synchronization.Data.ApplyChangeFailedEventArgs>
                  (NorthwindCacheServerSyncProvider_ApplyChangeFailed);
          }
      
          private void NorthwindCacheServerSyncProvider_ApplyChangeFailed(object sender,
              Microsoft.Synchronization.Data.ApplyChangeFailedEventArgs e)
          {
      
          if (e.Conflict.ConflictType ==
              Microsoft.Synchronization.Data.ConflictType.ClientUpdateServerUpdate)
              {
      
              //Resolve a client update / server update conflict by force writing
              //the client change to the server database.
              System.Windows.Forms.MessageBox.Show("A client update / server update conflict " +
                                                      "was detected at the server.");
              e.Action = Microsoft.Synchronization.Data.ApplyAction.RetryWithForceWrite;
      
              }
      
          }
      }
      
      public partial class NorthwindCacheClientSyncProvider
      {
      
          public void AddHandlers()
          {
              this.ApplyChangeFailed +=
                  new System.EventHandler<Microsoft.Synchronization.Data.ApplyChangeFailedEventArgs>
                  (NorthwindCacheClientSyncProvider_ApplyChangeFailed);
          }
      
          private void NorthwindCacheClientSyncProvider_ApplyChangeFailed(object sender,
              Microsoft.Synchronization.Data.ApplyChangeFailedEventArgs e)
          {
      
              if (e.Conflict.ConflictType ==
                  Microsoft.Synchronization.Data.ConflictType.ClientUpdateServerUpdate)
              {
      
                  //Resolve a client update / server update conflict by keeping the 
                  //client change.
                  e.Action = Microsoft.Synchronization.Data.ApplyAction.Continue;
      
              }
      
          }
      }
      

      Dans Form1.cs, modifiez le code dans le gestionnaire d'événements SynchronizeButton_Click afin d'appeler la méthode AddHandlers que vous avez ajoutée à NorthwindCache.cs lors de l'étape précédente :

      NorthwindCacheSyncAgent syncAgent = new NorthwindCacheSyncAgent();
      
      NorthwindCacheClientSyncProvider clientSyncProvider =
          (NorthwindCacheClientSyncProvider)syncAgent.LocalProvider;
      clientSyncProvider.AddHandlers();
      
      Microsoft.Synchronization.Data.SyncStatistics syncStats = 
          syncAgent.Synchronize();
      
    • Pour Visual Basic, dans NorthwindCache.vb, ajoutez le code suivant après l'instruction End Class pour la classe NorthwindCacheSyncAgent.

      Partial Public Class NorthwindCacheServerSyncProvider
      
          Private Sub NorthwindCacheServerSyncProvider_ApplyChangeFailed( _
              ByVal sender As Object, ByVal e As  _
              Microsoft.Synchronization.Data.ApplyChangeFailedEventArgs) _
              Handles Me.ApplyChangeFailed
      
              If e.Conflict.ConflictType = _
                  Microsoft.Synchronization.Data.ConflictType.ClientUpdateServerUpdate Then
      
                  'Resolve a client update / server update conflict by force writing
                  'the client change to the server database.
                  MessageBox.Show("A client update / server update conflict was detected at the server.")
                  e.Action = Microsoft.Synchronization.Data.ApplyAction.RetryWithForceWrite
      
              End If
      
          End Sub
      
      End Class
      
      Partial Public Class NorthwindCacheClientSyncProvider
      
          Private Sub NorthwindCacheClientSyncProvider_ApplyChangeFailed( _
              ByVal sender As Object, ByVal e As  _
              Microsoft.Synchronization.Data.ApplyChangeFailedEventArgs) _
              Handles Me.ApplyChangeFailed
      
              If e.Conflict.ConflictType = _
                  Microsoft.Synchronization.Data.ConflictType.ClientUpdateServerUpdate Then
      
                  'Resolve a client update / server update conflict by keeping the 
                  'client change.
                  e.Action = Microsoft.Synchronization.Data.ApplyAction.Continue
      
              End If
      
          End Sub
      
      End Class
      

Pour synchroniser et afficher la résolution des conflits

  1. Appuyez sur F5.

  2. Dans le formulaire, mettez à jour un enregistrement, puis cliquez sur le bouton Enregistrer.

  3. Dans l'Explorateur de serveurs/Explorateur de bases de données, mettez à jour le même enregistrement que dans le formulaire, mais avec une valeur différente, puis validez la modification.

  4. Revenez au formulaire, puis cliquez sur Synchroniser maintenant.

  5. Vérifiez la mise à jour dans la grille de l'application et la base de données serveur. Notez que la mise à jour effectuée sur le client a remplacé celle sur le serveur.

Suppression des colonnes de suivi serveur des commandes de synchronisation

Lorsque le cache de base de données locale est créé, les colonnes utilisées pour effectuer le suivi des modifications dans la base de données serveur sont téléchargées sur le client. (Dans cette procédure pas à pas, les colonnes sont CreationDate et LastEditDate.) Pour prendre en charge la synchronisation bidirectionnelle et garantir la convergence des données sur le client et le serveur, supprimez ces colonnes des commandes SQL qui appliquent les modifications à la base de données serveur. Vous pouvez également supprimer les colonnes des commandes qui sélectionnent les modifications du serveur à appliquer au client, mais cette opération n'est pas obligatoire. En raison de restrictions sur certaines modifications de schéma dans la base de données client, les colonnes ne peuvent pas être supprimées. Pour plus d'informations sur les commandes de synchronisation, consultez Procédure : spécifier la synchronisation par instantané, par téléchargement, par téléchargement ascendant et bidirectionnelle.

Notes

Si vous utilisez le suivi des modifications de SQL Server, les colonnes de suivi ne sont pas ajoutées à vos tables. Dans ce cas, vous n'avez pas à modifier les commandes qui appliquent les modifications au serveur.

Pour supprimer les colonnes de suivi des commandes de synchronisation

  • Ajoutez le code suivant à la classe NorthwindCache (NorthwindCache.vb ou NorthwindCache.cs) après l'instruction End Class pour la classe NorthwindCacheServerSyncProvider. Ce code redéfinit deux commandes qui sont définies en tant que propriétés sur l'objet SyncAdapter pour la table Customers : les propriétés InsertCommand et UpdateCommand. Les commandes qui ont été générées par la boîte de dialogue Configurer la synchronisation des données contenaient des références aux colonnes CreationDate et LastEditDate. Ces commandes ont été redéfinies dans la méthode OnInitialized de la classe CustomersSyncAdapter. La propriété DeleteCommand n'est pas redéfinie, car elle n'affecte pas les colonnes CreationDate et LastEditDate.

    Les variables de chaque commande SQL sont utilisées pour transmettre des données et métadonnées entre Sync Framework, le client et le serveur. Les variables de session suivantes sont utilisées dans les commandes ci-dessous :

    • @sync_row_count : retourne le nombre de lignes affectées par la dernière opération effectuée sur le serveur. Dans les bases de données SQL Server, @@ROWCOUNT fournit la valeur de cette variable.

    • @sync_force_write : utilisée pour forcer l'application d'une modification ayant échoué à cause d'un conflit ou d'une erreur.

    • @sync_last_received_anchor : utilisée pour définir l'ensemble de modifications à synchroniser durant une session.

    Pour plus d'informations sur les variables de session, consultez Procédure : utiliser des variables de session.

    public partial class CustomersSyncAdapter
    {
    
        partial void OnInitialized()
        {
    
        //Redefine the insert command so that it does not insert values 
        //into the CreationDate and LastEditDate columns.
        System.Data.SqlClient.SqlCommand insertCommand = new System.Data.SqlClient.SqlCommand();
    
        insertCommand.CommandText = "INSERT INTO dbo.Customers ([CustomerID], [CompanyName], " +
            "[ContactName], [ContactTitle], [Address], [City], [Region], [PostalCode], " +
            "[Country], [Phone], [Fax] )" +
            "VALUES (@CustomerID, @CompanyName, @ContactName, @ContactTitle, @Address, @City, " +
            "@Region, @PostalCode, @Country, @Phone, @Fax) SET @sync_row_count = @@rowcount";
        insertCommand.CommandType = System.Data.CommandType.Text;
        insertCommand.Parameters.Add("@CustomerID", System.Data.SqlDbType.NChar);
        insertCommand.Parameters.Add("@CompanyName", System.Data.SqlDbType.NVarChar);
        insertCommand.Parameters.Add("@ContactName", System.Data.SqlDbType.NVarChar);
        insertCommand.Parameters.Add("@ContactTitle", System.Data.SqlDbType.NVarChar);
        insertCommand.Parameters.Add("@Address", System.Data.SqlDbType.NVarChar);
        insertCommand.Parameters.Add("@City", System.Data.SqlDbType.NVarChar);
        insertCommand.Parameters.Add("@Region", System.Data.SqlDbType.NVarChar);
        insertCommand.Parameters.Add("@PostalCode", System.Data.SqlDbType.NVarChar);
        insertCommand.Parameters.Add("@Country", System.Data.SqlDbType.NVarChar);
        insertCommand.Parameters.Add("@Phone", System.Data.SqlDbType.NVarChar);
        insertCommand.Parameters.Add("@Fax", System.Data.SqlDbType.NVarChar);
        insertCommand.Parameters.Add("@sync_row_count", System.Data.SqlDbType.Int);
        insertCommand.Parameters["@sync_row_count"].Direction = 
            System.Data.ParameterDirection.Output;
    
        this.InsertCommand = insertCommand;
    
    
        //Redefine the update command so that it does not update values 
        //in the CreationDate and LastEditDate columns.
        System.Data.SqlClient.SqlCommand updateCommand = new System.Data.SqlClient.SqlCommand();
    
        updateCommand.CommandText = "UPDATE dbo.Customers SET [CompanyName] = @CompanyName, [ContactName] " +
            "= @ContactName, [ContactTitle] = @ContactTitle, [Address] = @Address, [City] " +
            "= @City, [Region] = @Region, [PostalCode] = @PostalCode, [Country] = @Country, " +
            "[Phone] = @Phone, [Fax] = @Fax " +
            "WHERE ([CustomerID] = @CustomerID) AND (@sync_force_write = 1 " +
            "OR ([LastEditDate] <= @sync_last_received_anchor)) SET @sync_row_count = @@rowcount";
        updateCommand.CommandType = System.Data.CommandType.Text;
        updateCommand.Parameters.Add("@CompanyName", System.Data.SqlDbType.NVarChar);
        updateCommand.Parameters.Add("@ContactName", System.Data.SqlDbType.NVarChar);
        updateCommand.Parameters.Add("@ContactTitle", System.Data.SqlDbType.NVarChar);
        updateCommand.Parameters.Add("@Address", System.Data.SqlDbType.NVarChar);
        updateCommand.Parameters.Add("@City", System.Data.SqlDbType.NVarChar);
        updateCommand.Parameters.Add("@Region", System.Data.SqlDbType.NVarChar);
        updateCommand.Parameters.Add("@PostalCode", System.Data.SqlDbType.NVarChar);
        updateCommand.Parameters.Add("@Country", System.Data.SqlDbType.NVarChar);
        updateCommand.Parameters.Add("@Phone", System.Data.SqlDbType.NVarChar);
        updateCommand.Parameters.Add("@Fax", System.Data.SqlDbType.NVarChar);
        updateCommand.Parameters.Add("@CustomerID", System.Data.SqlDbType.NChar);
        updateCommand.Parameters.Add("@sync_force_write", System.Data.SqlDbType.Bit);
        updateCommand.Parameters.Add("@sync_last_received_anchor", System.Data.SqlDbType.DateTime);
        updateCommand.Parameters.Add("@sync_row_count", System.Data.SqlDbType.Int);
        updateCommand.Parameters["@sync_row_count"].Direction = 
            System.Data.ParameterDirection.Output;
    
        this.UpdateCommand = updateCommand;
    
        }
    }
    
    Partial Public Class CustomersSyncAdapter
        Private Sub OnInitialized()
    
            'Redefine the insert command so that it does not insert values 
            'into the CreationDate and LastEditDate columns.
            Dim insertCommand As New System.Data.SqlClient.SqlCommand
            With insertCommand
                .CommandText = "INSERT INTO dbo.Customers ([CustomerID], [CompanyName], " & _
                    "[ContactName], [ContactTitle], [Address], [City], [Region], [PostalCode], " & _
                    "[Country], [Phone], [Fax] )" & _
                    "VALUES (@CustomerID, @CompanyName, @ContactName, @ContactTitle, @Address, @City, " & _
                    "@Region, @PostalCode, @Country, @Phone, @Fax) SET @sync_row_count = @@rowcount"
                .CommandType = System.Data.CommandType.Text
                .Parameters.Add("@CustomerID", System.Data.SqlDbType.NChar)
                .Parameters.Add("@CompanyName", System.Data.SqlDbType.NVarChar)
                .Parameters.Add("@ContactName", System.Data.SqlDbType.NVarChar)
                .Parameters.Add("@ContactTitle", System.Data.SqlDbType.NVarChar)
                .Parameters.Add("@Address", System.Data.SqlDbType.NVarChar)
                .Parameters.Add("@City", System.Data.SqlDbType.NVarChar)
                .Parameters.Add("@Region", System.Data.SqlDbType.NVarChar)
                .Parameters.Add("@PostalCode", System.Data.SqlDbType.NVarChar)
                .Parameters.Add("@Country", System.Data.SqlDbType.NVarChar)
                .Parameters.Add("@Phone", System.Data.SqlDbType.NVarChar)
                .Parameters.Add("@Fax", System.Data.SqlDbType.NVarChar)
                .Parameters.Add("@sync_row_count", System.Data.SqlDbType.Int)
                .Parameters("@sync_row_count").Direction = ParameterDirection.Output
            End With
    
            Me.InsertCommand = insertCommand
    
    
            'Redefine the update command so that it does not update values 
            'in the CreationDate and LastEditDate columns.
            Dim updateCommand As New System.Data.SqlClient.SqlCommand
            With updateCommand
                .CommandText = "UPDATE dbo.Customers SET [CompanyName] = @CompanyName, [ContactName] " & _
                    "= @ContactName, [ContactTitle] = @ContactTitle, [Address] = @Address, [City] " & _
                    "= @City, [Region] = @Region, [PostalCode] = @PostalCode, [Country] = @Country, " & _
                    "[Phone] = @Phone, [Fax] = @Fax " & _
                    "WHERE ([CustomerID] = @CustomerID) AND (@sync_force_write = 1 " & _
                    "OR ([LastEditDate] <= @sync_last_received_anchor)) SET @sync_row_count = @@rowcount"
                .CommandType = System.Data.CommandType.Text
                .Parameters.Add("@CompanyName", System.Data.SqlDbType.NVarChar)
                .Parameters.Add("@ContactName", System.Data.SqlDbType.NVarChar)
                .Parameters.Add("@ContactTitle", System.Data.SqlDbType.NVarChar)
                .Parameters.Add("@Address", System.Data.SqlDbType.NVarChar)
                .Parameters.Add("@City", System.Data.SqlDbType.NVarChar)
                .Parameters.Add("@Region", System.Data.SqlDbType.NVarChar)
                .Parameters.Add("@PostalCode", System.Data.SqlDbType.NVarChar)
                .Parameters.Add("@Country", System.Data.SqlDbType.NVarChar)
                .Parameters.Add("@Phone", System.Data.SqlDbType.NVarChar)
                .Parameters.Add("@Fax", System.Data.SqlDbType.NVarChar)
                .Parameters.Add("@CustomerID", System.Data.SqlDbType.NChar)
                .Parameters.Add("@sync_force_write", System.Data.SqlDbType.Bit)
                .Parameters.Add("@sync_last_received_anchor", System.Data.SqlDbType.DateTime)
                .Parameters.Add("@sync_row_count", System.Data.SqlDbType.Int)
                .Parameters("@sync_row_count").Direction = ParameterDirection.Output
            End With
    
            Me.UpdateCommand = updateCommand
    
        End Sub
    
    End Class
    

Pour synchroniser et afficher une mise à jour de colonne de suivi

  1. Appuyez sur F5.

  2. Dans le formulaire, mettez à jour un enregistrement en modifiant une valeur dans la colonne LastEditDate, puis cliquez sur le bouton Enregistrer.

  3. Revenez au formulaire, puis cliquez sur Synchroniser maintenant.

  4. Vérifiez la mise à jour dans la grille de l'application et la base de données serveur. Notez que la valeur de colonne du serveur a remplacé la mise à jour sur le client. Le processus de mise à jour est le suivant :

    1. Sync Framework identifie qu'une ligne a été modifiée sur le client.

    2. Lors de la synchronisation, la ligne est téléchargée et appliquée à la table de la base de données serveur. Toutefois, les colonnes de suivi ne sont pas incluses dans l'instruction de mise à jour. Sync Framework exécute en réalité un « exemple de mise à jour » sur la table.

    3. La ligne est alors retournée au client, mais les commandes qui sélectionnent les modifications du serveur comprennent les colonnes de suivi. Par conséquent, la modification apportée au client est remplacée par la valeur du serveur.

Conclusion

Dans cette procédure pas à pas, vous avez configuré la synchronisation bidirectionnelle avec une gestion de base des conflits et traité l'éventuel problème des colonnes de suivi serveur dans la base de données client. Les classes partielles vous permettent d'étendre le code du cache de base de données locale de plusieurs autres façons. Par exemple, vous pouvez redéfinir les commandes SQL qui sélectionnent les modifications de la base de données serveur afin que les données soient filtrées lors de leur téléchargement sur le client. Nous vous conseillons de lire les rubriques de procédures de cette documentation pour comprendre de quelles manières vous pouvez ajouter ou modifier un code de synchronisation pour répondre aux besoins de vos applications. Pour plus d'informations, consultez Programmation des tâches courantes de synchronisation client et serveur.

Voir aussi

Concepts

Programmation des tâches courantes de synchronisation client et serveur
Outils permettant de développer des applications