| Y bien, después de nuestro post de introducción, en este abordaremos como comenzar a trabajar con Ria Services para obtener los datos desde la base de datos, y como mostrarlos en nuestra aplicación Silverlight. | Indice: Introducción (Parte 1) |
‘Silverlight Business Application’ template
Lo primero que necesitamos mencionar es que el framework de Ria Services nos ofrece un template 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 esta 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)
Y bien, 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.
Modelo de Datos
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’.
Esto nos lanzará un asistente. En el primer paso nos permitirá seleccionar el contenido de nuestra modelo, en esta ocasión seleccionaremos que sea generado desde una base de datos.
En el siguiente paso del asistente configuraremos los datos de conexión de la base de datos.
*Yo usaré la base de datos de Northwind que pueden encontrar en el web para su descarga.
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 órdenes (Orders), y nombraremos el Namespace del Modelo como: RiaModel
Al terminar el asistente tendremos un esquema del modelo de datos como este:
Para terminar con esta parte, 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’.
Al agregar este tipo de clases, nos lanzará un pequeño 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.
Los elementos que nos entregará serán un par de clases, en mi caso: RiaDomainService.cs y RiaDomainService.metadata.cs. Como lo comente, 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:
- Como podemos ver, está etiquetada con [EnableClientAccess()], ya que pedimos fuera editable.
- Nos crea 4 funciones básicas: GetOrders(), InsertOrders(), UpdateOrders() y DeleteOrders(). El típico ABC de una base de datos.
- Esta clases es 100% modificable para nuestros propósitos. Así pues por ejemplo, si quisiéramos que nuestro método GetOrders() nos regrese los registros de manera ordenada, solo bastaría modificarla de tal modo que quedaría:
|
1 2 3 4 |
public IQueryable<Orders> GetOrders()
{
return this.ObjectContext.Orders.OrderBy(o => o.OrderDate);
} |
Continuará…
Ya hemos configurado nuestra aplicación web para proyectar los datos, en nuestro siguiente post ahora si comenzaremos a consumir estos datos y a mostrarlos desde nuestra aplicación silverlight…




6 comments
Salvador Vidal says:
Dec 29, 2009
Pregunta.
En mi tabla tengo tres filas
Declare un <riacontrols:DomainDataSource x:Name="Mydata" LoadSize="2"
para que me traiga dos filas.
en el DataPager PageSize="1" tengo un pagesize de 1.
En ejecucion el datapager me enseña 3 (osea que en la tabla hay 3 filas) pero la grid me enseña solo 1.
Cuando le pido el segundo, me lo enseña bien.
Al pedirle el siguiente, no me enseña nada.
Se supone que deberia de ir a la base de datos y traer otros dos no?
Jorge Levy says:
Dec 29, 2009
Salvador,
++Aunque nos estamos adelantando en el tema, aqui mi respuesta:
Según explicas, estas en lo correcto con la idea. No será que el tercer registro (que lo trae en el segundo paquete de tu DomainDataSource) está tardando en llegar? Mis recomendación: dale tiempo para ver si se esta tardando, o agrega un control de actividad/activity (que explicaremos en un futuro post) para saber si la comunicación esta ocupada.
Saludos.
Salvador Vidal says:
Dec 30, 2009
Creo que le doy tiempo, pero probare con el control activity.
Voy a probar.
Por cierto los cast que hiciste los tienes ya colgados en alguna pagina?
Muchas gracias.
Feliz Navidad.
Danilo Chaves says:
Jan 7, 2011
Que tal?
Tengo una pregunta:
Tengo dos tablas una (1) donde estan los datos y el código de país y otra (2) donde están los nombres de los paises
como hago para mostrar los datos en un datagrid de la tabla (1) pero que en lugar de mostrarme el código de país me muestre el nombre del país que está en la otra tabla.
Muchas gracias por su respuesta.
Arturo Molina says:
Jan 8, 2011
@Salvador hola! Lamentablemente los cast no los pudimos grabar, pero estamos pensando en poner a Jorge como invitado especial en la parte 8 del taller de Silverlight 4. Puedes obtener mas información en esta dirección: http://rdiazconcha.com/2010/08/anunciando-taller-de-silverlight-4/
Arturo Molina says:
Jan 8, 2011
@Danilo qué tal! Esperemos que Jorge avance pronto con esta serie de post para ver el uso de múltiples tablas con RIA Services. Por lo pronto te comento que hay que hacer dos cosas en tu clase de metadata (la que te genera si le das clic en “Generate associated classes for metadata”) y agregar el atributo [Include] en la la propiedad que representa la relación con tu 2da tabla, algo como esto:
[Include] Paises;
public EntityCollection
Además, necesitamos hacer que el DomainService incluya dicha entidad, esto lo logramos en el método de donde obtengas los datos de tu Tabla1:
public IQueryable GetArtistsWithAlbums()
{
return this.ObjectContext.Tabla1.Include(“Paises”);
}
De esta forma deberías de poder usar el binding en tu grid usando el path: Paises.Nombre
Además pronto tendremos la parte 8 del Taller de Silverlight 4 en donde se hablará de RIA Services (http://rdiazconcha.com/2010/08/anunciando-taller-de-silverlight-4/) y tocaremos éste y otros temas.
Por lo pronto te dejo con un artículo de Tim Heuer al respecto: http://timheuer.com/blog/archive/2010/01/05/master-details-with-ria-services-and-includedresults.aspx y la plática de Dan Whalin en el Silverlight Firestarter 2010 en donde muestra la misma técnica: http://channel9.msdn.com/Series/Silverlight-Firestarter/Silverlight-Firestarter-2010-Session-3-Building-Feature-Rich-Business-Apps-Today-with-RIA-Services