Tutorial: Agregar una caché de base de datos local a una aplicación de n niveles
Una caché de base de datos local, en el contexto de Visual Studio, es una base de datos de SQL Server Compact 3.5 que se configura para sincronizar datos con una base de datos remota mediante Microsoft Synchronization Services for ADO.NET. En este tutorial se proporcionan instrucciones paso a paso para agregar una base de datos de SQL Server Compact 3.5 a la aplicación creada en el tema Tutorial: Crear una aplicación de datos con n niveles).
Durante este tutorial, aprenderá a realizar las siguientes tareas:
Agregar un elemento de caché de base de datos local a un proyecto
Configurar la sincronización de datos.
Incorporar operaciones de sincronización en el servicio de datos existente.
Modificar el código que carga los datos para que recupere la tabla Customers de la caché de base de datos local.
Agregar código para iniciar el proceso de sincronización.
Requisitos previos
Para realizar este tutorial, necesita lo siguiente:
La solución y los proyectos asociados creados en Tutorial: Crear una aplicación de datos con n niveles.
Acceso a la base de datos de ejemplo Northwind. Para obtener más información, consulte Cómo: Instalar bases de datos de ejemplo.
Nota
Es posible que su equipo muestre nombres o ubicaciones diferentes para algunos de los elementos de la interfaz de usuario de Visual Studio incluidos en las instrucciones siguientes. La edición de Visual Studio que se tenga y la configuración que se utilice determinan estos elementos. Para obtener más información, vea Valores de configuración de Visual Studio.
Abrir la solución NTierWalkthrough
Para abrir la solución NTierWalkthrough
En el menú Archivo, elija Abrir, haga clic en Proyecto o solución y, a continuación, navegue a la ubicación del archivo NTierWalkthrough.sln.
Nota
El archivo NTierWalkthrough.sln se crea en el tema Tutorial: Crear una aplicación de datos con n niveles y es un requisito previo para poder completar este tutorial. Complete el tema Tutorial: Crear una aplicación de datos con n niveles y, si aún no lo ha hecho, guarde todos los proyectos cuando termine.
Agregar almacenamiento en caché de base de datos local a NTierWalkthrough
Dado que una caché de base de datos local es una base de datos de SQL Server Compact 3.5 ubicada en el cliente, agregue la caché de base de datos local al proyecto PresentationTier. Puesto que este tutorial muestra cómo almacenar en memoria caché la tabla Customers, denominará CustomersCache a la caché de base de datos local.
Nota
En este tutorial, la caché de base de datos local se denomina CustomersCache porque usa solamente la tabla Customers, pero se pueden agregar varias tablas a una caché de base de datos local.
Para agregar el almacenamiento de datos en caché local al nivel de presentación
En el Explorador de soluciones, haga clic con el botón secundario en PresentationTier y haga clic en Agregar nuevo elemento.
Haga clic en la plantilla Caché de base de datos local.
Escriba CustomersCache en Nombre.
Haga clic en Agregar.
Se abre el cuadro de diálogo Configurar sincronización de datos.
Configurar la sincronización de datos
Para configurar la sincronización de datos, seleccione la conexión de datos al servidor y seleccione las tablas que desea almacenar localmente en la memoria caché de la aplicación. Para este tutorial, establezca la conexión al servidor en la versión SQL Server de la base de datos Northwind y agregue la tabla Customers a la caché local. Además, puesto que está agregando la caché de base de datos local a una aplicación de n niveles, tiene que configurar las opciones avanzadas para generar los componentes de sincronización de servidor en un proyecto independiente: DataService.
Para configurar la sincronización de datos en una aplicación de n niveles
Establezca Conexión del servidor en la versión de SQL Server de la base de datos Northwind.
Haga clic en el botón Agregar para abrir el cuadro de diálogo Configurar tablas para usarlas sin conexión.
Active la casilla asociada a la tabla Customers y haga clic en Aceptar. (Mantenga los valores predeterminados.)
Haga clic en Avanzado.
En la lista Ubicación del proyecto de servidor, seleccione DataService.
Haga clic en Aceptar.
Se generan los componentes de sincronización, se sincronizan los datos por primera vez (se crea la base de datos local en el proyecto y se rellena con los datos) y se abre el Asistente para la configuración de orígenes de datos.
Seleccione la tabla Customers y, a continuación, active la casilla asociada a ella en la página Elija los objetos de base de datos.
Escriba LocalNorthwindCustomers para el Nombre de DataSet y haga clic en Finalizar.
Habilitar la sincronización en el servicio de datos existente
Los componentes de sincronización generados se han agregado en el proyecto DataService, pero todavía los tiene que implementar el servicio. El SyncContract generado contiene la información que necesita el servicio. Esta información aparece como comentarios en el archivo. Copie la información necesaria en la sección adecuada del archivo App.config del servicio.
Para agregar la información del servicio al archivo App.config
En el Explorador de soluciones, abra el archivo CustomersCache.Server.SyncContract haciendo doble clic en él.
Busque la línea marcada como comentario que se asemeje a lo siguiente:
<endpoint address ="" binding="wsHttpBinding" contract="DataService.ICustomersCacheSyncContract"/>
Copie la línea sin el carácter del comentario.
En el Explorador de soluciones, abra el archivo App.config de DataService haciendo doble clic en él.
Busque el comentario <!-- Metadata Endpoints -->. Agregue la línea que copió en el paso 3 bajo la línea que comienza con <endpoint address = "mex".
Escriba un nombre (por ejemplo, SyncServer) para la dirección del extremo que acaba de pegar de manera que el código sea similar al siguiente:
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/> <endpoint address ="SyncServer" binding="wsHttpBinding" contract="DataService.ICustomersCacheSyncContract"/>
En el menú Generar, haga clic en Generar solución.
Para agregar las operaciones de servicio de sincronización al servicio de datos existente
En el Explorador de soluciones, abra el archivo CustomersCache.Server.SyncContract haciendo doble clic en él.
Cambie el nombre de clase de CustomersCacheSyncService a Service1. Los siguientes ejemplos de código muestran la declaración de clase tal y como debería aparecer después de cambiar el nombre de clase. (Los usuarios de C# también deben cambiar el nombre del constructor.)
Partial Public Class Service1 Inherits Object Implements ICustomersCacheSyncContract ...
public partial class Service1 : object, ICustomersCacheSyncContract {...
Para los usuarios de C#:
Cambie la declaración de clase para que Service1 (en el archivo Service1.cs) sea una clase parcial, de forma que la declaración se asemeje a lo siguiente:
public partial class Service1 : object, ICustomersCacheSyncContract { private CustomersCacheServerSyncProvider _serverSyncProvider; public Service1() {...
En el menú Generar, haga clic en Generar solución.
Dado que las operaciones de sincronización se agregaron al servicio existente, debe actualizar la referencia del servicio en el proyecto PresentationTier.
Para actualizar la referencia de servicio
En el Explorador de soluciones, busque ServiceReference1 en el proyecto PresentationTier.
Haga clic con el botón secundario en ServiceReference1 y haga clic en Actualizar referencia de servicio.
Modificar el formulario para cargar los datos de Customers de la caché local
El formulario en el nivel de presentación obtiene actualmente sus datos del servicio de datos. Por consiguiente, tiene que modificar el código para cargar los datos de la copia local de la tabla Customers en la base de datos de SQL Server Compact 3.5. La tabla Orders todavía se carga con los datos devueltos de DataService.
Para modificar Form1 y cargar los datos de Customers de la caché de base de datos local
Abra Form1 en el Editor de código.
Reemplace el código Form1_Load existente por el siguiente:
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()); }
Probar la aplicación
Ejecute la aplicación. Los datos se recuperan tanto de la caché de base de datos local como del servicio de datos.
Para probar la aplicación
Presione F5.
Los datos de la tabla Customers se recuperan de la base de datos local y los datos de la tabla Orders se recuperan del servicio de datos.
Cierre el formulario.
Sincronizar datos
Ahora que el nivel de presentación se establece para mostrar las tablas de los orígenes correctos, el paso siguiente es agregar el código para iniciar la sincronización. Agregará un botón al formulario para iniciar el proceso de sincronización.
Para sincronizar los datos entre la caché de base de datos local y la base de datos remota
Abra Form1 en la vista Diseño.
Haga clic en ToolStrip en el formulario y agregue un botón a ToolStrip.
Asigne el nombre SyncButton al botón.
Haga doble clic en SyncButton para crear un controlador de eventos SyncButton_Click.
El código siguiente inicia el proceso de sincronización. Agréguelo al controlador de eventos.
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); }
Los datos de la tabla Customers se recuperan de la base de datos local y los datos de la tabla Orders se recuperan del servicio de datos.
Cierre el formulario.
Probar la aplicación
Para probar la aplicación
Presione F5.
Cuando se esté ejecutando la aplicación, use el Explorador de servidores/Explorador de bases de datos (u otra herramienta de administración de bases de datos) para conectar a la base de datos del servidor remoto y modificar algunos registros.
En el Explorador de servidores/Explorador de bases de datos, busque la tabla Customers del servidor de bases de datos remoto (no la conexión a Northwind.sdf).
Haga clic con el botón secundario en la tabla Customers y, a continuación, haga clic en Mostrar datos de tabla.
Modifique uno o varios registros y confirme el cambio. (Desplácese fuera de la fila modificada.)
Regrese al formulario y haga clic en SyncButton.
Compruebe que los cambios realizados en la base de datos remota se hayan sincronizado con la base de datos local y que se muestren en la cuadrícula.
Cierre el formulario. (Detenga la depuración.)
Pasos siguientes
En función de los requisitos de la aplicación, quizás sea conveniente realizar varios pasos después de agregar una caché de base de datos local a una aplicación de n niveles. Por ejemplo, a continuación se indican algunas de las mejoras que podría realizar en esta aplicación:
Agregar validación al conjunto de datos. Para obtener más información, vea Tutorial: Agregar validación a una aplicación de datos con n niveles.
Habilite la sincronización bidireccional. Para obtener más información, vea Cómo: Configurar una base de datos local y una base de datos remota para que exista sincronización bidireccional.
Vea también
Tareas
Cómo: Agregar código a conjuntos de datos en aplicaciones con n niveles
Tutorial: Agregar validación a una aplicación de datos con n niveles
Tutorial: Crear una aplicación que se conecta ocasionalmente
Tutorial: Implementar una aplicación cliente conectada ocasionalmente con la base de datos local
Conceptos
Información general sobre aplicaciones de datos con n capas
Información general sobre las aplicaciones conectadas ocasionalmente
SQL Server Compact 3.5 y Visual Studio
Novedades en el desarrollo de aplicaciones de datos