Exemplarische Vorgehensweise: Hinzufügen eines Cache für lokale Datenbanken zu einer N-Tier-Anwendung

Ein Cache für lokale Datenbanken beschreibt im Kontext von Visual Studio eine SQL Server Compact 3.5-Datenbank, die für die Synchronisierung von Daten mit einer Remotedatenbank mithilfe von Microsoft Synchronization Services für ADO.NET konfiguriert ist. Diese exemplarische Vorgehensweise enthält schrittweise Anweisungen, dazu wie Sie der im Thema Exemplarische Vorgehensweise: Erstellen einer N-Tier-Datenanwendung erstellten Anwendung eine SQL Server Compact 3.5-Datenbank hinzufügen.

In dieser exemplarischen Vorgehensweise wird gezeigt, wie Sie die folgenden Aufgaben ausführen:

  • Hinzufügen eines Cache für lokale Datenbanken zu einem Projekt

  • Konfigurieren der Datensynchronisierung

  • Integrieren von Synchronisierungsoperationen in den vorhandenen Datendienst

  • Ändern des Codes zum Laden von Daten, sodass die Tabelle Customers aus dem Cache für lokale Datenbanken abgerufen wird

  • Hinzufügen von Code zum Starten des Synchronisierungsprozesses

Vorbereitungsmaßnahmen

Zum Durchführen dieser exemplarischen Vorgehensweise benötigen Sie Folgendes:

Tipp

Ihr Computer zeigt möglicherweise für einige der Elemente der Visual Studio-Benutzeroberfläche in der folgenden Anleitung andere Namen oder Standorte an. Diese Elemente sind von der jeweiligen Visual Studio-Version und den verwendeten Einstellungen abhängig. Weitere Informationen finden Sie unter Visual Studio-Einstellungen.

Öffnen der NTierWalkthrough-Projektmappe

So öffnen Sie die NTierWalkthrough-Projektmappe

Hinzufügen des Cache für lokale Datenbanken zu NTierWalkthrough

Da ein Cache für lokale Datenbanken einer SQL Server Compact 3.5-Datenbank auf dem Client entspricht, fügen Sie dem PresentationTier-Projekt den Cache für lokale Datenbanken hinzu. Da in dieser exemplarischen Vorgehensweise veranschaulicht wird, wie die Tabelle Customers zwischengespeichert wird, nennen Sie den Cache für lokale Datenbanken CustomersCache.

Tipp

In dieser exemplarischen Vorgehensweise hat der Cache für lokale Datenbanken den Namen CustomersCache, da er nur die Tabelle Customers verwendet, obwohl einem Cache für lokale Datenbanken mehrere Tabellen hinzugefügt werden können.

So fügen Sie der Präsentationsebene eine Cache für lokale Daten hinzu

  1. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf PresentationTier, und klicken Sie anschließend auf Neues Element hinzufügen.

  2. Klicken Sie auf die Vorlage Cache für lokale Datenbanken.

  3. Geben Sie für Name den Eintrag CustomersCache ein.

  4. Klicken Sie auf Hinzufügen.

    Das Dialogfeld Datensynchronisierung konfigurieren wird geöffnet.

Konfigurieren der Datensynchronisierung

Um die Datensynchronisierung zu konfigurieren, wählen Sie die Datenverbindung zum Server und die Tabellen aus, die lokal in der Anwendung zwischengespeichert werden sollen. Legen Sie die Serverbindung für diese exemplarische Vorgehensweise auf die SQL Server-Version der Northwind-Datenbank fest, und fügen Sie dem lokalen Cache die Tabelle Customers hinzu. Da Sie den Cache für lokale Datenbanken einer N-Tier-Anwendung hinzufügen, müssen Sie zusätzlich erweiterte Optionen festlegen, um die Komponenten für die Serversynchronisierung in einem separaten Projekt zu generieren: DataService.

So konfigurieren Sie die Datensynchronisierung in einer N-Tier-Anwendung

  1. Legen Sie Serververbindung auf die SQL Server-Version der Northwind-Datenbank fest.

  2. Klicken Sie auf die Schaltfläche Hinzufügen, um das Dialogfeld Tabellen für die Offlineverwendung konfigurieren zu öffnen.

  3. Aktivieren Sie das Kontrollkästchen neben der Tabelle Customers, und klicken Sie auf OK. (Behalten Sie alle Standardwerte bei.)

  4. Klicken Sie auf Erweitert.

  5. Wählen Sie in der Liste Serverprojektverzeichnis den Eintrag DataService aus.

  6. Klicken Sie auf OK.

    Die Synchronisierungskomponenten werden generiert, die Daten erstmalig synchronisiert (die lokale Datenbank wird im Projekt erstellt und mit Daten gefüllt) sowie der Assistent zum Konfigurieren von Datenquellen geöffnet.

  7. Wählen Sie die Tabelle Customers aus, und aktivieren Sie das Kontrollkästchen, das der Tabelle auf der Seite Datenbankobjekte auswählen zugeordnet ist.

  8. Geben Sie LocalNorthwindCustomers für DataSet-Name ein, und klicken Sie auf Fertig stellen.

Aktivieren der Synchronisierung im vorhandenen Datendienst

Die generierten Synchronisierungskomponenten wurden dem DataService-Projekt zwar hinzugefügt, müssen jedoch noch vom Dienst implementiert werden. Der generierte SyncContract enthält die vom Dienst benötigten Informationen. Diese Informationen werden als Kommentare in der Datei angezeigt. Kopieren Sie die erforderlichen Informationen in den entsprechenden Abschnitt der Datei App.config des Dienstes.

So fügen Sie der Datei App.config Dienstinformationen hinzu

  1. Öffnen Sie die Datei CustomersCache.Server.SyncContract, indem Sie im Projektmappen-Explorer darauf doppelklicken.

  2. Suchen Sie eine kommentierte Zeile ähnlich der folgenden:

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

  3. Kopieren Sie die Zeile ohne das Kommentarzeichen.

  4. Öffnen Sie die Datei App.config von DataService, indem Sie im Projektmappen-Explorer darauf doppelklicken.

  5. Suchen Sie den Kommentar <!-- Metadata Endpoints -->. Fügen Sie unterhalb der Zeile, die mit <endpoint address = "mex" beginnt, die unter Schritt 3 kopierte Zeile hinzu.

  6. Geben Sie einen Namen (z. B. SyncServer) für die gerade eingefügte Endpunktadresse ein, sodass der Code etwa wie folgt aussieht:

    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
    <endpoint address ="SyncServer" binding="wsHttpBinding" contract="DataService.ICustomersCacheSyncContract"/>
    
  7. Klicken Sie im Menü Erstellen auf Projektmappe erstellen.

So fügen Sie dem vorhandenen Datendienst Synchronisierungsdienstoperationen hinzu

  1. Öffnen Sie die Datei CustomersCache.Server.SyncContract, indem Sie im Projektmappen-Explorer darauf doppelklicken.

  2. Ändern Sie den Klassennamen von CustomersCacheSyncService in Service1. Durch die folgenden Codebeispiele wird die Klassendeklaration veranschaulicht, so wie sie nach dem Ändern des Klassennamens angezeigt werden soll. (C#-Benutzer müssen außerdem den Namen des Konstruktors ändern.)

    Partial Public Class Service1
        Inherits Object
        Implements ICustomersCacheSyncContract
    ...
    
    public partial class Service1 : object, ICustomersCacheSyncContract
    {...
    
  3. Für C#-Benutzer:

    Ändern Sie die Klassendeklaration für Service1 (in der Datei Service1.cs) in eine partielle Klasse, sodass die Deklaration etwa wie folgt aussieht:

    public partial class Service1 : object, ICustomersCacheSyncContract {
    
    private CustomersCacheServerSyncProvider _serverSyncProvider;
    
    public Service1() 
    {...
    
  4. Klicken Sie im Menü Erstellen auf Projektmappe erstellen.

Da die Synchronisierungsoperationen dem vorhandenen Dienst hinzugefügt wurden, müssen Sie den Dienstverweis im PresentationTier-Projekt aktualisieren.

So aktualisieren Sie den Dienstverweis

  1. Suchen Sie im Projektmappen-Explorer im PresentationTier-Projekt ServiceReference1.

  2. Klicken Sie mit der rechten Maustaste auf ServiceReference1, und klicken Sie auf Dienstverweis aktualisieren.

Ändern des Formulars, damit Kundendaten aus dem lokalen Cache geladen werden

Das Formular in der Präsentationsebene ruft derzeit seine Daten aus dem Datendienst ab. Folglich müssen Sie den Code ändern, um die Daten aus der lokalen Kopie der Tabelle Customers in der SQL Server Compact 3.5-Datenbank zu laden. Die Tabelle Orders wird weiterhin mit den aus DataService zurückgegebenen Daten geladen.

So ändern Sie Form1, damit Kundendaten aus dem Cache für lokale Datenbanken geladen werden

  1. Öffnen Sie im Code-Editor Form1.

  2. Ersetzen Sie den vorhandenen Form1_Load-Code durch den folgenden Code:

    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());
    }
    

Testen der Anwendung

Führen Sie die Anwendung aus. Die Daten werden sowohl aus dem Cache für lokale Datenbanken als auch aus dem Datendienst abgerufen.

So testen Sie die Anwendung

  1. Drücken Sie F5.

  2. Die Daten aus der Tabelle Customers werden aus der lokalen Datenbank und die Daten aus der Tabelle Orders aus dem Datendienst abgerufen.

  3. Schließen Sie das Formular.

Synchronisieren von Daten

Nachdem die Präsentationsebene jetzt für die Anzeige von Tabellen aus den richtigen Quellen eingerichtet wurde, besteht der nächste Schritt darin, Code zum Starten der Synchronisierung hinzuzufügen. Sie fügen dem Formular eine Schaltfläche zum Starten des Synchronisierungsprozesses hinzu.

So synchronisieren Sie Daten zwischen dem Cache für lokalen Datenbanken und der Remotedatenbank

  1. Öffnen Sie Form1 in der Entwurfsansicht.

  2. Klicken Sie auf den Toolstrip auf dem Formular, und fügen Sie ihm eine Schaltfläche hinzu.

  3. Nennen Sie die Schaltfläche SyncButton.

  4. Doppelklicken Sie auf SyncButton, um einen SyncButton_Click-Ereignishandler zu erstellen.

  5. Im folgenden Code wird der Synchronisierungsprozess gestartet. Fügen Sie ihn dem Ereignishandler hinzu.

    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. Die Daten aus der Tabelle Customers werden aus der lokalen Datenbank und die Daten aus der Tabelle Orders aus dem Datendienst abgerufen.

  7. Schließen Sie das Formular.

Testen der Anwendung

So testen Sie die Anwendung

  1. Drücken Sie F5.

  2. Wenn die Anwendung ausgeführt wird, verwenden Sie den Server-Explorer/Datenbank-Explorer (oder ein anderes Tool zur Datenbankverwaltung), um eine Verbindung zur Remoteserver-Datenbank herzustellen und einige Datensätze zu ändern.

    1. Suchen Sie mit dem Server-Explorer/Datenbank-Explorer die Tabelle Customers auf dem Remotedatenbankserver (nicht die Verbindung zu Northwind.sdf).

    2. Klicken Sie mit der rechten Maustaste auf die Tabelle Customers, und klicken Sie auf Tabellendaten anzeigen.

    3. Ändern Sie einen oder mehrere Datensätze, und führen Sie einen Commit für die Änderung aus. (Navigieren Sie weg von der geänderten Zeile.)

  3. Wechseln Sie zum Formular zurück, und klicken Sie auf SyncButton.

  4. Überprüfen Sie, ob die Änderungen an der Remotedatenbank mit der lokalen Datenbank synchronisiert und im Raster angezeigt werden.

  5. Schließen Sie das Formular. (Den Debugvorgang beenden.)

Nächste Schritte

Je nach den Anforderungen Ihrer Anwendung können Sie verschiedene Schritte ausführen, nachdem Sie einer N-Tier-Anwendung einen Cache für lokale Datenbanken hinzugefügt haben. Beispielsweise können Sie der Anwendung folgende Erweiterungen hinzufügen:

Siehe auch

Aufgaben

Gewusst wie: Hinzufügen von Code zu DataSets in N-Tier-Anwendungen

Exemplarische Vorgehensweise: Hinzufügen von Validierungen zu einer N-Tier-Datenanwendung

Exemplarische Vorgehensweise: Erstellen einer gelegentlich verbundenen Anwendung

Exemplarische Vorgehensweise: Bereitstellen einer gelegentlich verbundenen Clientanwendung mit der lokalen Datenbank

Gewusst wie: Konfigurieren einer lokalen und einer Remotedatenbank für bidirektionale Synchronisierung

Konzepte

Übersicht über N-Tier-Datenanwendungen

Übersicht über gelegentlich verbundene Anwendungen

SQL Server Compact 3.5 und Visual Studio

Neues in der Datenanwendungsentwicklung

Weitere Ressourcen

Hierarchische Aktualisierung

Zugreifen auf Daten in Visual Studio