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.

Leave a Reply

You must be logged in to post a comment.