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:

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

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

  1. En el Explorador de soluciones, haga clic con el botón secundario en PresentationTier y haga clic en Agregar nuevo elemento.

  2. Haga clic en la plantilla Caché de base de datos local.

  3. Escriba CustomersCache en Nombre.

  4. 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

  1. Establezca Conexión del servidor en la versión de SQL Server de la base de datos Northwind.

  2. Haga clic en el botón Agregar para abrir el cuadro de diálogo Configurar tablas para usarlas sin conexión.

  3. Active la casilla asociada a la tabla Customers y haga clic en Aceptar. (Mantenga los valores predeterminados.)

  4. Haga clic en Avanzado.

  5. En la lista Ubicación del proyecto de servidor, seleccione DataService.

  6. 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.

  7. 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.

  8. 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

  1. En el Explorador de soluciones, abra el archivo CustomersCache.Server.SyncContract haciendo doble clic en él.

  2. Busque la línea marcada como comentario que se asemeje a lo siguiente:

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

  3. Copie la línea sin el carácter del comentario.

  4. En el Explorador de soluciones, abra el archivo App.config de DataService haciendo doble clic en él.

  5. 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".

  6. 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"/>
    
  7. En el menú Generar, haga clic en Generar solución.

Para agregar las operaciones de servicio de sincronización al servicio de datos existente

  1. En el Explorador de soluciones, abra el archivo CustomersCache.Server.SyncContract haciendo doble clic en él.

  2. 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
    {...
    
  3. 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() 
    {...
    
  4. 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

  1. En el Explorador de soluciones, busque ServiceReference1 en el proyecto PresentationTier.

  2. 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

  1. Abra Form1 en el Editor de código.

  2. 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

  1. Presione F5.

  2. 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.

  3. 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

  1. Abra Form1 en la vista Diseño.

  2. Haga clic en ToolStrip en el formulario y agregue un botón a ToolStrip.

  3. Asigne el nombre SyncButton al botón.

  4. Haga doble clic en SyncButton para crear un controlador de eventos SyncButton_Click.

  5. 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);
    }
    
  6. 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.

  7. Cierre el formulario.

Probar la aplicación

Para probar la aplicación

  1. Presione F5.

  2. 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.

    1. 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).

    2. Haga clic con el botón secundario en la tabla Customers y, a continuación, haga clic en Mostrar datos de tabla.

    3. Modifique uno o varios registros y confirme el cambio. (Desplácese fuera de la fila modificada.)

  3. Regrese al formulario y haga clic en SyncButton.

  4. 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.

  5. 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:

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

Cómo: Configurar una base de datos local y una base de datos remota para que exista sincronización bidireccional

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

Otros recursos

Actualización jerárquica

Obtener acceso a los datos en Visual Studio