ADO.NET Data Services

December 10th, 2007

Ya se encuentra disponible la primera entrega de ASP.NET 3.5 Extensions Preview, la cual pueden descargar desde aquí, seguramente el centro de todas las miradas va a estar con ASP.NET MVC, por eso no voy a hablar de él en este post, ya que tanto en los QuickStarts como en el blog de Scott Guthrie hay bastantes ejemplos e información sobre el mismo.

De lo que si les voy a hablar es de ADO.NET Data Services el cual es el nuevo nombre del antes conocido proyecto Astoria, el mismo cuenta con varios cambios desde la CTP anterior, pero para mostrárselos nada mejor que comenzar con un proyecto desde cero. Antes que nada debemos tener instalado además de ASP.NET 3.5 Extensions Preview, ADO.NET Entity Framework Beta 3 y ADO.NET Entity Framework Tools Dec 07 CTP.

Vamos a comenzar creando un nuevo proyecto Web como se ve en la siguiente imagen.

Luego crearemos nuestro modelo de datos

Seleccionamos la opción Generate from Database

Elegimos la base de datos a utilizar

Seleccionamos las tablas que usaremos para el ejemplo y hacemos click en Finish.

Concluido este paso ya tenemos listo nuestro modelo de datos

Luego seleccionamos la opción Add new ítem y creamos un nuevo ADO.NET Data Service

Si recuerdan mi post anterior sobre Astoria, al llegar a este punto solo debíamos indicar a nuestro WebDataService que utilice nuestro Entity Model y ya estaba todo listo para exponer nuestra data al mundo, pero en esta versión esto ha cambiado, ahora debemos autorizar explícitamente cuales tablas y qué tipo de permiso utilizara nuestro ADO.NET Data Service.

En la siguiente imagen podrán ver como he referenciado a Microsoft.Data.Web y a mi modelo de datos, también pueden observar como inicializo el servicio, elijo las tablas a utilizar y el tipo de permiso que deseo asignarle.

Para este ejemplo voy a dejar que todas las tablas puedan ser expuestas es por ellos que he puesto un asterisco en lugar del nombre de una tabla en particular.

using System;

using System.Web;

using System.Collections.Generic;

using System.ServiceModel.Web;

using System.Linq;

using Microsoft.Data.Web;

using OranjeModel;

namespace OranjeDataService

{

public class Oranje : WebDataService<OranjeEntities>

{

public static void InitializeService(IWebDataServiceConfiguration config)

{

config.SetResourceContainerAccessRule(“*”, ResourceContainerRights.All);

}

}

}

Si presiono F5 para correr mi aplicación, podrán ver algo similar a lo expuesto en la siguiente imagen.

Podrán apreciar que el formato en que se está mostrando la información es AtomPub (Atom Publishing Protocol), este es otro de los cambios con respecto a la anterior CTP, también podemos consumir nuestro servicio utilizando JSON.

Si desean investigar más sobre como exponer data a través de ADO.NET Data Services, podrán en encontrar más información y ejemplos en los ASP.NET 3.5 Extensions Preview QuickStarts.

Bien, ahora que ya tenemos nuestro servicio funcionando, vamos a consumirlo, el escenario más común para hacerlo, seria en una aplicación Web, pero para este ejemplo utilizare una aplicación de consola.

Vamos a crear la aplicación de consola para la demo

Luego agregaremos una referencia a Microsoft.Data.WebClient en nuestro proyecto

Como vamos a necesitar representar la entidades definidas por el Data Service, deberíamos crearlas a las mismas en nuestro proyecto, para ello utilizaremos la utilidad WebDataGen que se encuentra en la carpeta donde están instaladas las ASP.NET 3.5 Extensions Preview, ejecutaremos la utilidad y le pasaremos los siguientes parámetros.

Entre los cuales se encuentran el nombre del archivo que generaremos con las entidades y la URI donde se encuentra nuestro servicio

Finalizado el proceso ya tendremos listo nuestro modelo de datos para poder ser añadido a nuestra aplicación de ejemplo utilizando la opción Add existing item.

En el archivo Program.cs de nuestra aplicación de ejemplo vamos a crear un referencia a nuestro entity model.

using OranjeModel;

Para consumir los datos de nuestro servicio utilizaremos la librería Microsoft.Data.WebClient, la misma cuenta con dos clases, WebDataContext y WebDataQuery, la primera representa el contexto en tiempo de ejecución de un web data service dado, la segunda permite hacer consulta contra un servicio utilizando la sintaxis basada en URIs de ADO.NET Data Service.

En el siguiente código podemos ver un ejemplo de WebDataContext y WebDataQuery en funcionamiento.

using System;

using System.Collections.Generic;

using Microsoft.Data.WebClient;

using System.Linq;

using System.Text;

using OranjeModel;

namespace OranjeDataClient

{

class Program

{

static void Main(string[] args)

{

WebDataContext ctx = new WebDataContext(“http://localhost:6239/Oranje.svc”);

WebDataQuery<Players> players = ctx.CreateQuery<Players>(“/Players”);

foreach (Players p in players)

{

Console.WriteLine(“Number:” + p.Number + ” Name: “ + p.Name + ” Age: “ + p.Age);

}

}

}

}

Presionando Ctrl+F5 deberíamos de obtener un resultado similar al de la siguiente imagen.

Además de utilizar WebDataContext y WebDataContext.CreateQuery para consultar un Data Service tambien es posible hacer consultas utilizando LINQ, como verán en el siguiente ejemplo la librería Microsoft.Data.WebClient se encarga de mapear las instrucciones LINQ contra la URI del Data Service y recuperar los recursos especificados como objetos .NET

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using OranjeModel;

namespace OranjeDataClient

{

class Program

{

static void Main(string[] args)

{

OranjeEntities ctx = new OranjeEntities(“http://localhost:6239/Oranje.svc”);

var q = from p in ctx.Players

orderby p.Age

select p;

foreach (var player in q)

{

Console.WriteLine(“Number:” + player.Number + ” Name: “ + player.Name + ” Age: “ + player.Age);

}

}

}

}

Presionamos Ctrl+F5 y deberíamos de ver los datos de las jugadoras ordenados por edad.

Nuevamente y para finalizar les dejo el enlace a los QuickStarts donde podrán encontrar información más detallada.

En la actualidad vemos como proveedores de servicios y fabricantes de productos tratan de lograr que los mismos sean simples de entender, simples de usar, esta tarea no es para nada simple y no quiere decir que los productos o servicios que se ofrezcan deban carecer de funciones o características, si tomamos como ejemplo al iPod el cual es el referente en lo que a simplicidad hablamos, podemos ver que de por sí es un aparato complejo, cargado de características, pero a sus vez no solo es simple de usar sino que también transmite la sensación de simplicidad.

Últimamente muchos escriben sobre el concepto de simplicidad, de todo ellos John Maeda se destaca y en su libro The Laws of Simplicity nos proporciona diez leyes y tres reglas las cuales nos guían en los conceptos que conforman se simples y algunos consejos para aplicarlos en nuestro trabajo diario, de todas las leyes la decima engloba a las demás y dice

La simplicidad consiste en sustraer lo que es obvio y añadir lo específico

The Laws of Simplicity está traducido a muchos idiomas, incluido el español, se puede conseguir en Amazon o en cualquier librería de primera línea, el libro es pequeño, cerca de cien páginas y es de una lectura muy fluida con ejemplos prácticos y de la vida real.

Para ir finalizando les dejo el link a la página oficial del libro donde encontraran notas y artículos relacionados con el mismo y un video con una presentación de John Maeda en TED.

The Laws of Simplicity Homepage

TED Talks John Maeda: Simplicity patterns

The Laws of Simplicity