LinQ (Practicas)

  • View
    901

  • Download
    4

Embed Size (px)

Text of LinQ (Practicas)

20-mayo-2007 Usando LINQ to SQL (1 Parte)Publicado en LINQ, LINQ to SQL, Scott Guthri a 7:18 pm por Juanma

En los ltimos meses he escrito una serie de post que cubran algunas de las caracterstcias que van a venir con Visual Studio y .NET Framework Orcas. Aqu tenis los enlaces: Propiedades automticas, inicializadores de objectos e inicializadores de colleciones. Mtodos de extensin. Expresiones Lambda.

Sintaxis de consultas. Tipos Annimos

Las caractersticas anteriores hacen que la consulta de datos sea un concepto de primera clase. Conocemos a este modelo de programacin como LINQ que viene de .NET Language Integrated Query. Los desarrolladores pueden usar LINQ con cualquier fuente de datos. Pueden expresar consultas eficientemente en los lenguajes de programacin que eligan, opcionalmente transformar/incrustar los resultados de las consultas en el formato que quieran, y entonces manipular fcilmente los resultados. Los lenguajes habilitados para LINQ pueden aportar seguridad de tipos y chequeo en tiempo de compilacin el las expresiones de consulta, y desarrollar herramientas que aporten intelisense, debugging, y un gran soporte para refactoring cuando escriban cdigo de LINQ. LINQ soporta un modelo de extensibilidad muy rico que facilita la creacin de operadores eficientes para fuentes de datos. La versin Orcas del .NET Framework biene con libreras que habilitan LINQ sobre objetos, XML y bases de datos. Qu es LINQ to SQL? LINQ to SQL es una implementacin de O/RM(object relational mapping, mapeador de objetos relacionales) que viene con la versin Orcas del .NET Framework, y

nos permite modelar bases de datos relacionales con clases de .NET. Podemos consultar bases de datos con LINQ, as como actualizar/aadir/borrar datos de ellas. Modelando bases de datos con LINQ to SQL: Visual Studio Orcas viene con un diseador de LINQ to SQL que nos aporta una forma fcil de modelar y visualizar una base de datos como un modelo de objeto de LINQ to SQL. El prximo post cubrir en ms profundidad cmo usar este diseador (podis ver ste video que hice en Enero para verme construir un modelo LINQ to SQL). Usando ese diseador LINQ to SQL puedo crear fcilmente una representacin de la base de datos Northwind:

El diseo de arriba define cuatro clases: Product, Category, Order y OrderDetail. Las propiedades de cada clase mapean las columnas de cada table en la base de datos. Cada instancia de esa clase representa una fila en las tablas. Las flechas entre las cuatro clases de arriba representan las asociaciones/relaciones entre las diferentes entidades. Son tpicamente modeladas como relaciones primary-key/foreign-key en la base de datos. La direccin de las flechas en el diseador indican si la relacin es uno-a-uno o uno-a-varios. Se aadiran propiedades fuertemente tipadas a las entidades basndose en esto. Por ejemplo, la clase Category de arriba tiene una relacin de uno-a-varios con la clase Product. Esto implica que tendr una propiedad Categories que es una coleccin de objetos Product con esa categora. La clase Product entonces tiene una propiedad Category que apunta a una instancia de la clase Category representando la categora a la que pertenece el producto. El panel de la derecha del diseador LINQ to SQL contiene una lista de procedimientos almacenados que interactan con nuestro modelo de base de datos. En el ejemplo de arriba hemos aadido un SPROC (Procedimiento almacenado) GetProductsByCategory. Como entrada recibe un categoryID, y devuelve una secuencia de Product como resultado. Veremos cmo llamar a este procedimiento almacenado en un ejemplo.

Entendiendo la clase DataContext Cuando pulsis el boton save del diseador de LINQ to SQL, Visual Studio generar clases .NET para representar las entidades y las relaciones de la base de datos que hemos modelado. Por cada archivo aadido a nuestra solucin por el diseador LINQ to SQL tambin se generar una clase DataContext. Esta clase es a traves de la cual realizaremos las consultas a las entidades de nuestra base de datos. Esta clase tendr propiedades que representarn a cada tabla que hemos modelado, as como mtodos para cada procedimiento almacenado que aadamos. Por ejemplo, aqu tenis la clase NorthwindDataContext:

Ejemplos de LINQ to SQL Una vez que hemos modelado nuestra base de datos con el diseador de LINQ to SQL, podemos escribir cdigo fcilmente para trabajar con l. Aqu tenis unos cuantos ejemplos que muestran tareas comunes con datos: 1) Consultando Products de la base de datos El siguiente cdigo usa una consulta LINQ para obtener una secuencia IEnumerable de objetos Product. Fijos que este cdigo est consultando a traves de la relacin Product/Category para obtener aquellos productos de la categora Beverages. C#:

VB:

2) Actualizando un producto en la base de datos. El cdigo siguiente muestra cmo obtener un producto de la base de datos, actualizar su precio, y guardar los cambios en la base de datos:

C#:

VB:

Nota: VB en Orcas Beta1 no soporta Lambdas an. Pero en la Beta2 s -de forma que el cdigo anterior se podr escribir de una forma ms concisa. 3) Aadir una nueva categora y dos nuevos productos en la base de datos. El siguiente cdigo muestra cmo crear una nueva categora, y entonces crear dos nuevos productos y asociarlos a la nueva categora. Los tres son despus guardados en la base de datos. Fijaos como no necesitamos administrar manualmente las relaciones primarykey/foreignkey. Slo tenemos que aadir los objetos Product en la coleccin Products de la categora, y luego aadir el nuevo objeto Category en la coleccin de Categories del DataContext, LINQ to SQL sabr automticamente crear las PF/FK necesarias: C#:

4)Borar productos de la base de datos. El cdigo siguiente muestra cmo borrar todos los productos Toy de la base de datos: C#:

VB:

5) Llamar a un procedimiento almacenado. El cdigo siguiente muestra cmo obtener entidades de la tabla Product sin usar una consulta LINQ, sino llamando al procedimiento almacenado GetProductsByCategory que aadimos a nuestro modelo de datos. Fijos que cuando obtenemos los resultados de la tabla Product, podemos actualizar/borrarlos y llamar a db.SubmitChanges() para hacer las modificaciones en la base de datos. C#:

VB:

6) Obtener productos con paginado del lado del servidor El cdigo siguiente muestra cmo implementar un paginado eficiente en el lado servidor como parte de una consulta LINQ. Usando los operadores Skip() y Take(), slo devoleremos 10 filas de la base de datos a partir de la fila 200. C#:

VB:

Resmen: LINQ to SQL nos permite modelar la capa de datos de nuestras aplicaciones de una forma simple y limpia. Una vez que hayamos definido nuestro modelo de datos, podemos realizar consultas, inserciones, actualizaciones y borrados sobre ella de forma fcil y eficiente. Espero que esta introduccin os haya abierto el apetito de aprender ms. En las prximas semanas continuar esta serie de post explorando el LINQ to SQL en ms detalle.

30-mayo-2007 LINQ to SQL (2 Parte Definiendo nuestras clases del modelo de datos)Publicado en .NET, ASP .NET, LINQ, LINQ to SQL, Visual Studio a 12:06 am por Juanma

En la primera parte de la serie de post sobre LINQ to SQL habl sobre qu es LINQ to SQL? y vimos por encima algunos escenarios que permite. En aqul post pusimos unos cuantos ejemplos de cdigo donde demostrbamos cmo mejorar la parte de datos usando LINQ to SQL: Cmo Cmo Cmo Cmo

consultar una base de datos. actualizar filas en una base de datos aadir y relacionar varias filas en una base de datos. eliminar filas de la base de datos.

Cmo llamar a procedimientos almacenados. Cmo obtener datos con paginacin en el servidor.

Mejoramos todos estos escenarios usando un modelo de clases de LINQ to SQL como ste:

En este segundo post de la serie vamos a ver en ms detalle cmo crear el modelo anterior con LINQ to SQL. LINQ to SQL, el diseador de LINQ to SQL, y todas las caractersticas que estamos viendo saldrn con la versin de .NET 3.5 y en la release de Visual Studio Orcas.

Podis seguir todos los pasos siguientes descargndo tanto Visual Studio Orcas Beta 1 o Visual Web Developer Express Orcas Beta 1. Podis instalar las dos y usarlas sin ningn problema con Visual Studio 2005. Crear un nuevo modelo de datos LINQ to SQL Podemos aadir un modelo de datos de LINQ to SQL a un projecto ASP.NET, Class Library o Windows, con la nueva opcin Add New Item seleccionando LINQ to SQL:

Seleccionando LINQ to SQL lanzar el diseador de LINQ to SQL, y nos permitir modelar las clases que representen una base de datos relacional. Tambin crear una clas fuertemente tipada DataContext que tendr las propiedades que representarn cualquier tabla que modelemos de la base de datos, as como mtodos para cada procedimiento almacenado que modelemos. Como describimos en la primera parte de esta serie de post, la clase DataContext es el conducto principal que usaremos tanto para consultar la base de datos como para guardar los cambios que hagamos.

Aqu tenis una captura de pantalla de un diseo LINQ to SQL ORM vaco, es lo que veris despues de crear un nuevo modelo de datos LINQ to SQL:

Clases Entidad (Entity) LINQ to SQL nos permite modelar clases que mapeen una base de datos. Estas clases son tpicamente conocidas como Clases Entidad (en ingles Entity Classes) y a las instancias se las conoce como Entidades (en ingles Entities). Las clases entidad mapean a tablas de una base de datos. Las propiedades de una clase entidad normalmente mapean las columnas de la tabla. Cada instancia de una clase entidad representa a una fila de una tabla de la base de datos. Las clases entidad definidas por LINQ to SQL no tienen que derivar de una clase base especfica, lo que significa que pueden heredar de cualquier objeto que queramos. Todas las clases creadas por el diseador de LINQ to SQL se definen como cl