WCF Ria Services V1.0 para Silverlight 4.- Obtener datos desde la BD (Parte 2)

Y bien, después de nuestro post de introducción, en éste abordaremos como comenzar a trabajar con Ria Services para obtener los información desde la base de datos, y como mostrarlos en nuestra aplicación Silverlight. Indice:
Introducción (Parte 1)

Plantilla de VS2010 para WCF Ria Sercvices

Lo primero que necesitamos mencionar es que el framework de Ria Services nos ofrece una plantilla (template) para VS2010 llamada ‘Silverlight Business Appication’ que nos entregará una solución totalmente configurada para comenzar a trabajar. Esta solución viene ya incluso con las siguientes características:

  • La solución está compuesta por dos proyectos, una aplicación web y una aplicación Silverlight. La aplicación web será la encargada de la conexión y acceso a la base datos, así como la que proyectará los datos hacia la aplicación silverlight, que será la que le de vista a estos.
  • La aplicación Silverlight que nos entrega está creada sobre el framework de navegación (para leer sobre el Framework de Navegación puedes ir a estos post)
  • Servicios de manejo de usuarios (membership) ya están incluido. (estos los veremos cómo usar y modificar en un post posterior)

WCFRiaServices201

Modelo de Datos

Para poder acceder a los datos desde nuestra aplicación Silverlight, es necesario crear "en nuestra aplicación web" un modelo de datos y proyectarlos desde nuestra aplicación web con una clase de servicio de dominio.

Lo primero que haremos es crear un modelo de nuestra base datos. Esto será, como ya lo hemos mencionado, del lado de nuestra aplicación web. En esta ocasión agregaremos un nuevo elemento del tipo ‘ADO.NET Entity Data Model’. Le pondremos por nombre ‘RIAModel.edmx’. (Como sugerencia, la pondremos en la carpeta ‘Models’)

WCFRiaServices202

WCFRiaServices203

Esto nos lanzará un asistente. En el primer paso nos permitirá seleccionar el contenido de nuestro modelo, en esta ocasión seleccionaremos que sea generado desde una base de datos.

WCFRiaServices204

En el siguiente paso del asistente configuraremos los datos de conexión de la base de datos.

*Yo usaré la base de datos de AdventureWorks sample databases que pueden encontrar en el web para su descarga.

WCFRiaServices205

En el tercer paso del asistente, seleccionaremos los objetos que queremos estén incluidos en modelo de datos. Además configuraremos el Namespace del Modelo.

*Para nuestros propósitos por ahora solo seleccionaremos la tabla de Product (Production), y nombraremos el Namespace del Modelo como: RiaModel

Al seleccionar la opción de pluralizar o singularizar lo nombre de los objectos generados (Pluraliza or singularize generated object names), le estamos diciendo al modelo que los objetos deberan tener el nombre de entidad en plural y el nombre en singular, lo cual nos ayudará a entender posteriormente de una mejor manera con que tipo de objeto estamos trabajando al hacer consultas a los datos.

WCFRiaServices206

Al terminar el asistente tendremos un esquema del modelo de datos como este. Observemos que el ‘Entity Set Name’ esta pluralizado.

 WCFRiaServices207
Una vez completado nuestro modelo, tendremos que compilar el proyecto, ya que para la siguiente sección, es necesario tener nuestro modelo de datos ya disponible.

Clase de Servicio de Dominio

El siguiente paso en el que trabajaremos será el encargado de proyectar los datos desde nuestra aplicación web hacia nuestra aplicación silverlight. Y esto lo lograremos agregando un elemento del tipo ‘Domain Services Class’, el cual añadiremos a nuestro proyecto web en la carpeta llamada ‘Services’, lo cual haremos en la carpeta de Services y lo llamaremos RiaDomainService.cs

WCFRiaServices208

Al agregar este tipo de clases, nos lanzará un asistente que nos permitirá seleccionar los elementos configurados en nuestro Modelo de Datos que queremos sean proyectados por medio de un servicio, así como una opción para permitir sean editados. Además de que también nos ofrece la opción de crear las clases asociadas para los metadatos de los objetos (dedicaremos un post a este tema).

*Si no se muestra ninguno de los elementos configurados anteriormente es probable que el proyecto no fuera compilado previamente.

WCFRiaServices209

Los elementos que nos entregará serán un par de clases, en mi caso: RiaDomainService.cs y RiaDomainService.metadata.cs. Como lo comenté, la segunda de ellas la abordaremos con mayor detalle en un post posterior. Pero de la que si necesitamos hablar es de la de RiaDomainService.cs.

Lo que podemos platicar hasta este momento de esta clase es que:

  1. Como podemos ver, está etiquetada con [EnableClientAccess()], ya que pedimos fuera editable.
  2. Nos crea 4 funciones básicas: GetProducts(), InsertProducts(), UpdateProducts() y DeleteProducts(). El típico ABC de una base de datos.
  3. Esta clase es 100% modificable para nuestros propósitos. Así pues por ejemplo, si quisiéramos que nuestro método GetProducts() nos regrese los registros de manera ordenada, solo bastaría modificarla de tal modo que quedaría:
public IQueryable<Product> GetProducts()
{
    return this.ObjectContext.Products.OrderBy(p => p.Name);
}

Continuará…

Ya hemos configurado nuestra aplicación web para proyectar los datos, en nuestro siguiente post ahora sí comenzaremos a consumir estos datos y a mostrarlos desde nuestra aplicación silverlight…

Saludos

  • Leandro

    Muchas gracias por el Post, aparentemente está muy bueno (sigo leyendo), pero me surgió una duda:

    return this.ObjectContext.Products.OrderBy(p => p.Name);

    que es “p”?

    Creo que esto está relacionado con Linq y expresion es lamba… pero no se que es “p”
    Muchas gracias.
    Leandro

    • http://www.jorgelevy.com Jorge Levy

      Hola Leandro,

      Así es, esto es una expresión Lamba, y “p” es un nombre albitrario que representa al objeto y al cual tu le asignas el nombre que tu decidas, pudiendo ser (product => product.Name). Usualmente se utiliza una sola letra por conveniencia y rapidez.

      Un saludo…