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:
Die unter Exemplarische Vorgehensweise: Erstellen einer N-Tier-Datenanwendung erstellte Projektmappe und die zugehörigen Projekte.
Zugriff auf die Beispieldatenbank Northwind. Weitere Informationen finden Sie unter Gewusst wie: Installieren von Beispieldatenbanken.
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
Zeigen Sie im Menü Datei auf Öffnen, klicken Sie auf Projekt/Projektmappe, und navigieren Sie dann zum Speicherort der Datei NTierWalkthrough.sln.
Tipp
Die Datei NTierWalkthrough.sln wird im Thema Exemplarische Vorgehensweise: Erstellen einer N-Tier-Datenanwendung erstellt und ist zum Durchführen dieser exemplarischen Vorgehensweise erforderlich. Befolgen Sie die Anweisungen im Thema Exemplarische Vorgehensweise: Erstellen einer N-Tier-Datenanwendung, und speichern Sie abschließend alle Projekte, wenn Sie dies nicht bereits getan haben.
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
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf PresentationTier, und klicken Sie anschließend auf Neues Element hinzufügen.
Klicken Sie auf die Vorlage Cache für lokale Datenbanken.
Geben Sie für Name den Eintrag CustomersCache ein.
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
Legen Sie Serververbindung auf die SQL Server-Version der Northwind-Datenbank fest.
Klicken Sie auf die Schaltfläche Hinzufügen, um das Dialogfeld Tabellen für die Offlineverwendung konfigurieren zu öffnen.
Aktivieren Sie das Kontrollkästchen neben der Tabelle Customers, und klicken Sie auf OK. (Behalten Sie alle Standardwerte bei.)
Klicken Sie auf Erweitert.
Wählen Sie in der Liste Serverprojektverzeichnis den Eintrag DataService aus.
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.
Wählen Sie die Tabelle Customers aus, und aktivieren Sie das Kontrollkästchen, das der Tabelle auf der Seite Datenbankobjekte auswählen zugeordnet ist.
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
Öffnen Sie die Datei CustomersCache.Server.SyncContract, indem Sie im Projektmappen-Explorer darauf doppelklicken.
Suchen Sie eine kommentierte Zeile ähnlich der folgenden:
<endpoint address ="" binding="wsHttpBinding" contract="DataService.ICustomersCacheSyncContract"/>
Kopieren Sie die Zeile ohne das Kommentarzeichen.
Öffnen Sie die Datei App.config von DataService, indem Sie im Projektmappen-Explorer darauf doppelklicken.
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.
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"/>
Klicken Sie im Menü Erstellen auf Projektmappe erstellen.
So fügen Sie dem vorhandenen Datendienst Synchronisierungsdienstoperationen hinzu
Öffnen Sie die Datei CustomersCache.Server.SyncContract, indem Sie im Projektmappen-Explorer darauf doppelklicken.
Ä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 {...
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() {...
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
Suchen Sie im Projektmappen-Explorer im PresentationTier-Projekt ServiceReference1.
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
Öffnen Sie im Code-Editor Form1.
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
Drücken Sie F5.
Die Daten aus der Tabelle Customers werden aus der lokalen Datenbank und die Daten aus der Tabelle Orders aus dem Datendienst abgerufen.
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
Öffnen Sie Form1 in der Entwurfsansicht.
Klicken Sie auf den Toolstrip auf dem Formular, und fügen Sie ihm eine Schaltfläche hinzu.
Nennen Sie die Schaltfläche SyncButton.
Doppelklicken Sie auf SyncButton, um einen SyncButton_Click-Ereignishandler zu erstellen.
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); }
Die Daten aus der Tabelle Customers werden aus der lokalen Datenbank und die Daten aus der Tabelle Orders aus dem Datendienst abgerufen.
Schließen Sie das Formular.
Testen der Anwendung
So testen Sie die Anwendung
Drücken Sie F5.
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.
Suchen Sie mit dem Server-Explorer/Datenbank-Explorer die Tabelle Customers auf dem Remotedatenbankserver (nicht die Verbindung zu Northwind.sdf).
Klicken Sie mit der rechten Maustaste auf die Tabelle Customers, und klicken Sie auf Tabellendaten anzeigen.
Ä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.)
Wechseln Sie zum Formular zurück, und klicken Sie auf SyncButton.
Überprüfen Sie, ob die Änderungen an der Remotedatenbank mit der lokalen Datenbank synchronisiert und im Raster angezeigt werden.
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:
Hinzufügen der Validierung zum DataSet. Weitere Informationen finden Sie unter Exemplarische Vorgehensweise: Hinzufügen von Validierungen zu einer N-Tier-Datenanwendung.
Aktivieren der bidirektionalen Synchronisierung. Weitere Informationen finden Sie unter Gewusst wie: Konfigurieren einer lokalen und einer Remotedatenbank für bidirektionale Synchronisierung.
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
Konzepte
Übersicht über N-Tier-Datenanwendungen
Übersicht über gelegentlich verbundene Anwendungen
SQL Server Compact 3.5 und Visual Studio
Neues in der Datenanwendungsentwicklung