Share via


Procédure pas à pas : ajout d'un cache de base de données locale à une application multicouche

Mise à jour : novembre 2007

Un cache de base de données locale, dans le contexte de Visual Studio, est une base de données SQL Server Compact 3.5 configurée pour synchroniser des données avec une base de données distante à l'aide de Microsoft Synchronization Services pour ADO.NET. Cette procédure pas à pas fournit des instructions pour ajouter une base de données SQL Server Compact 3.5 à l'application créée dans la rubrique Procédure pas à pas : création d'une application de données multicouche.

Dans cette procédure pas à pas, vous allez apprendre à effectuer les tâches suivantes :

  • Ajouter un élément Cache de base de données locale à un projet.

  • Configurer la synchronisation de données.

  • Incorporer des opérations de synchronisation dans le service de données existant.

  • Modifier le code qui charge des données afin qu'il extraie la table Customers du cache de base de données locale.

  • Ajouter du code pour initialiser le processus de synchronisation.

Composants requis

Pour exécuter cette procédure pas à pas, vous devez disposer des éléments suivants :

Remarque :

Il est possible que votre ordinateur affiche des noms ou des emplacements différents pour certains des éléments d'interface utilisateur Visual Studio dans les instructions suivantes. L'édition de Visual Studio dont vous disposez et les paramètres que vous utilisez déterminent ces éléments. Pour plus d'informations, consultez Paramètres Visual Studio.

Ouverture de la solution NTierWalkthrough

Pour ouvrir la solution NTierWalkthrough

Ajout de la mise en cache de base de données locale à NTierWalkthrough

Dans la mesure où un cache de base de données locale est une base de données SQL Server Compact 3.5 située sur le client, ajoutez le cache de base de données locale au projet PresentationTier. Étant donné que cette procédure pas à pas indique comment mettre en cache la table Customers, vous nommerez le cache de base de données locale CustomersCache.

Remarque :

Dans cette procédure pas à pas, le cache de base de données locale est nommé CustomersCache car il utilise uniquement la table Customers, mais plusieurs tables peuvent être ajoutées à un cache de base de données locale.

Pour ajouter la mise en cache de données locale à la couche de présentation

  1. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur PresentationTier, puis cliquez sur Ajouter un nouvel élément.

  2. Cliquez sur le modèle Cache de base de données locale.

  3. Tapez CustomersCache pour la valeur Nom.

  4. Cliquez sur Ajouter.

    La boîte de dialogue Configurer la synchronisation des données s'affiche.

Configuration de la synchronisation de données

Pour configurer la synchronisation de données, sélectionnez la connexion de données au serveur et sélectionnez les tables que vous souhaitez mettre en cache localement dans votre application. Pour cette procédure pas à pas, définissez comme connexion au serveur la version SQL Server de la base de données Northwind et ajoutez la table Customers au cache local. En outre, dans la mesure où vous ajoutez le cache de base de données locale à une application multicouche, vous devez définir les options avancées de manière à générer les composants de synchronisation du serveur dans un projet séparé : DataService.

Pour configurer la synchronisation de données dans une application multicouche

  1. Définissez comme Connexion au serveur la version SQL Server de la base de données Northwind.

  2. Cliquez sur le bouton Ajouter afin d'afficher la boîte de dialogue Configurer les tables pour une utilisation hors connexion.

  3. Activez la case à cocher associée à la table Customers et cliquez sur OK. (Conservez les valeurs par défaut.)

  4. Cliquez sur Avancé.

  5. Dans la liste Emplacement du projet serveur, sélectionnez DataService.

  6. Cliquez sur OK.

    Les composants de synchronisation sont générés, les données sont synchronisées pour la première fois (la base de données locale est créée dans le projet et remplie avec les données) et l'Assistant Configuration de source de données s'ouvre.

  7. Sélectionnez la table Customers, puis activez la case à cocher associée sur la page Choisir vos objets de base de données.

  8. Tapez LocalNorthwindCustomers pour Nom du DataSet et cliquez sur Terminer.

Activation de la synchronisation dans le service de données existant

Les composants de synchronisation générés ont été ajoutés au projet DataService, mais ils doivent encore être implémentés par le service. Le SyncContract généré contient les informations requises par le service. Ces informations apparaissent comme des commentaires dans le fichier. Copiez les informations nécessaires dans la section appropriée du fichier App.config du service.

Pour ajouter les informations de service au fichier App.config

  1. Ouvrez le fichier CustomersCache.Server.SyncContract en double-cliquant dessus dans l'Explorateur de solutions.

  2. Localisez la ligne de commentaire qui se présente comme suit :

    <endpoint address ="" binding="wsHttpBinding" contract="DataService.ICustomersCacheSyncContract"/>

  3. Copiez la ligne sans le caractère de commentaire.

  4. Ouvrez le fichier App.config du projet DataService en double-cliquant dessus dans l'Explorateur de solutions.

  5. Recherchez le commentaire <!-- Metadata Endpoints -->. Ajoutez la ligne que vous avez copiée à l'étape 3 sous la ligne qui commence par <endpoint address = "mex".

  6. Tapez un nom (par exemple, ServeurSync) pour l'adresse de point de terminaison que vous venez de coller afin d'obtenir un code semblable au suivant :

    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
    <endpoint address ="SyncServer" binding="wsHttpBinding" contract="DataService.ICustomersCacheSyncContract"/>
    
  7. Dans le menu Générer, cliquez sur Générer la solution.

Pour ajouter les opérations du service de synchronisation au service de données existant

  1. Ouvrez le fichier CustomersCache.Server.SyncContract en double-cliquant dessus dans l'Explorateur de solutions.

  2. Remplacez le nom de classe CustomersCacheSyncService par Service1. Les exemples de code suivants montrent la déclaration de classe comme elle doit apparaître après la modification du nom de classe. (Les utilisateurs C# doivent également modifier le nom du constructeur.)

    Partial Public Class Service1
        Inherits Object
        Implements ICustomersCacheSyncContract
    ...
    
    public partial class Service1 : object, ICustomersCacheSyncContract
    {...
    
  3. Pour les utilisateurs C# :

    Modifiez la déclaration de classe de Service1 (dans le fichier Service1.cs) de sorte qu'elle devienne une classe partielle pour que la déclaration se présente comme suit :

    public partial class Service1 : object, ICustomersCacheSyncContract {
    
    private CustomersCacheServerSyncProvider _serverSyncProvider;
    
    public Service1() 
    {...
    
  4. Dans le menu Générer, cliquez sur Générer la solution.

Étant donné que les opérations de synchronisation ont été ajoutées au service existant, vous devez mettre à jour la référence de service dans le projet PresentationTier.

Pour mettre à jour la référence de service

  1. Dans l'Explorateur de solutions, localisez ServiceReference1 dans le projet PresentationTier.

  2. Cliquez avec le bouton droit sur ServiceReference1 et cliquez sur Mettre à jour la référence de service.

Modification du formulaire pour charger les données Customers à partir du cache local

Le formulaire dans la couche de présentation obtient actuellement ses données du service de données. Par conséquent, vous devez modifier le code pour charger les données à partir de la copie locale de la table Customers dans la base de données SQL Server Compact 3.5. La table Orders est encore chargée avec les données retournées par le projet DataService.

Pour modifier Form1 afin de charger les données Customers à partir du cache de base de données locale

  1. Ouvrez Form1 dans l'éditeur de code.

  2. Remplacez le code existant Form1_Load par celui-ci :

    Using DataSvc As New ServiceReference1.Service1Client
    
        ' Create a CustomersTableAdapter to load data from
        ' the local database cache.
        Dim CustomersTableAdapter As New LocalNorthwindCustomersTableAdapters.CustomersTableAdapter
    
        NorthwindDataSet.Customers.Merge(CustomersTableAdapter.GetData)
        NorthwindDataSet.Orders.Merge(DataSvc.GetOrders)
    End Using
    
    using (ServiceReference1.Service1Client DataSvc = new ServiceReference1.Service1Client())
    {
        LocalNorthwindCustomersTableAdapters.CustomersTableAdapter customersTableAdapter
           = new LocalNorthwindCustomersTableAdapters.CustomersTableAdapter();
        northwindDataSet.Customers.Merge(customersTableAdapter.GetData());
        northwindDataSet.Orders.Merge(DataSvc.GetOrders());
    }
    

Test de l'application

Exécutez l'application. Les données sont extraites du cache de base de données locale et du service de données.

Pour tester l'application

  1. Appuyez sur F5.

  2. Les données de la table Customers sont extraites du cache de base de données locale et les données de la table Orders du service de données.

  3. Fermez le formulaire.

Synchronisation des données

Maintenant que la couche de présentation est configurée pour afficher les tables des sources correctes, l'étape suivante consiste à ajouter le code pour initialiser la synchronisation. Vous allez ajouter un bouton au formulaire pour démarrer le processus de synchronisation.

Pour synchroniser les données du cache de base de données locale et de la base de données distante

  1. Ouvrez Form1 en mode Design.

  2. Dans le formulaire, cliquez sur Toolstrip et ajoutez-lui un bouton.

  3. Nommez ce bouton BoutonSync.

  4. Double-cliquez sur BoutonSync pour créer un gestionnaire d'événements SyncButton_Click.

  5. Le code suivant démarre le processus de synchronisation. Ajoutez-le au gestionnaire d'événements.

    Dim syncAgent As CustomersCacheSyncAgent = New CustomersCacheSyncAgent
    
        Using syncClient As New ServiceReference1.CustomersCacheSyncContractClient
        syncAgent.RemoteProvider = New Microsoft.Synchronization.Data.ServerSyncProviderProxy(syncClient)
        Dim syncStats As Microsoft.Synchronization.Data.SyncStatistics = syncAgent.Synchronize
    
        NorthwindDataSet.Customers.Merge(New LocalNorthwindCustomersTableAdapters.CustomersTableAdapter().GetData())
    
        Dim syncSummary As String = "Total changes downloaded: " & _
           syncStats.TotalChangesDownloaded.ToString() & vbCrLf & _
           "Last successful synchronization: " & _
           syncStats.SyncCompleteTime.ToString
        MessageBox.Show(syncSummary)
    End Using 
    
    CustomersCacheSyncAgent syncAgent = new CustomersCacheSyncAgent();
    
    using (ServiceReference1.CustomersCacheSyncContractClient syncClient = new ServiceReference1.CustomersCacheSyncContractClient())
    {
        syncAgent.RemoteProvider = new Microsoft.Synchronization.Data.ServerSyncProviderProxy(syncClient);
        Microsoft.Synchronization.Data.SyncStatistics syncStats = syncAgent.Synchronize();
        northwindDataSet.Customers.Merge(new LocalNorthwindCustomersTableAdapters.CustomersTableAdapter().GetData());
    
        string syncSummary = "Total changes downloaded: " + 
        syncStats.TotalChangesDownloaded.ToString() + Environment.NewLine +
        "Last successful synchronization: " +
         syncStats.SyncCompleteTime.ToString();
        MessageBox.Show(syncSummary);
    }
    
  6. Les données de la table Customers sont extraites du cache de base de données locale et les données de la table Orders du service de données.

  7. Fermez le formulaire.

Test de l'application

Pour tester l'application

  1. Appuyez sur F5.

  2. Pendant que l'application s'exécute, utilisez l'Explorateur de serveurs/Explorateur de bases de données (ou un autre outil de gestion de base de données) pour vous connecter à la base de données serveur distante et modifier des enregistrements.

    1. Dans l'Explorateur de serveurs/Explorateur de bases de données, localisez la table Customers sur le serveur de base de données distante (et non pas la connexion à Northwind.sdf).

    2. Cliquez avec le bouton droit sur la table Customers et sélectionnez Afficher les données de la table.

    3. Modifiez un ou plusieurs enregistrements et validez les modifications. Quittez la ligne modifiée.

  3. Revenez au formulaire et cliquez sur BoutonSync.

  4. Vérifiez que les modifications apportées à la base de données distante sont synchronisées avec la base de données locale et sont affichées dans la grille.

  5. Fermez le formulaire. (Arrêtez le débogage.)

Étapes suivantes

Selon les spécifications de votre application, vous pouvez exécuter différentes étapes après l'ajout du cache de base de données locale à une application multicouche. Par exemple, vous pouvez apporter les améliorations suivantes à cette application :

Voir aussi

Tâches

Comment : ajouter du code aux groupes de données dans des applications multicouches

Procédure pas à pas : ajout d'une validation à une application de données multicouche

Procédure pas à pas : création d'une application occasionnellement connectée

Procédure pas à pas : déploiement d'une application cliente occasionnellement connectée avec la base de données locale

Comment : configurer une base de données locale et distante pour la synchronisation bidirectionnelle

Concepts

Vue d'ensemble de l'application de données multicouche

Vue d'ensemble des applications occasionnellement connectées

SQL Server Compact 3.5 et Visual Studio

Nouveautés des données

Autres ressources

Mise à jour hiérarchique

Accès aux données (Visual Studio)