Un ejemplo de ADO Entity Framework y LinQ

|

He estado un poco mas libre estos días así es que por esto he decidido poner mas cosas interesantes en mi blog, cuando me refiero a cosas interesantes me refiero a código útil, que en algún momento ya sea de ocio o desesperación, ha hecho que mi vida valga la pena!! Pues bien hay una revolución en nuestro mundo .NET que se está acercando a pasos agigantados como es el ADO Entity Framework, antes solo he escrito solo para anunciarlo o para comentar sobre el mismo, pues hoy les quiero mostrar como se puede usar el Entity Framework combinado con LinQ, es decir ustedes requieren o el Beta 2 de Visual Studio 2008 (Este es mi caso), o su RTM y el ultimo CTP del EF, es el de diciembre, en uno de mis anteriores post esta como descargarlo...


Muy bien!! Primero que es el EF?? El ADO Entity Framework permite que se cree una capa de persistencia automáticamente, cuando hablo de capa de persistencia me refiero a que se crean clases que manejan la interacción entre la Base de Datos y la solución, esta capa esta representada por clases que reflejan los elementos de la base de datos como las tablas, vistas, procedimientos almacenados, funciones, etc. a diferencia de otras soluciones existentes de este tipo (NHibernate y Hibernate para Java) esto es completamente VISUAL!!! A lo que nos tiene acostumbrado MS, es decir hago una conexion en Visual Studio 2008 en el Server Explorer, arrastro las tablas sobre mi modelo, especifico unos NameSpaces y voila!!! Capa de persistencia!! Y es realmente completa, uno ejecuta operaciones sobre las clases y esto se refleja automáticamente sobre la base de datos, además tiene cosas interesantes como el deferred execution, esto significa que la capa ejecuta las instrucciones solo cuando es realmente necesario, incluso se puede indicar que ciertos "campos" de la base de datos no sean obtenidos hasta que sean explícitamente utilizados, para que es útil esto?? Es bueno cuando almacenas archivos en campos binarios por ejemplo...


Como se lo hace?? Bien abren su Visual Studio 2008, se crean una librería de clases y la llaman como quieran, en mi caso TestLibCSharp, y le agregamos un archivo de tipo LinQToSql Classes como este:



Listo ahora desde el Server Explorer se debe arrastrar lo que uno desea incluir como objetos, si no tienen una conexión en el Server Explorer pues no es difícil crearla, al momento con mi versión y con el CTP de EF no es posible usar mas que SQL Server, pero al momento el resto de proveedores de datos como DataDirect ha anunciado que van a soportar también el EF por lo cual absolutamente todas las bases de datos comerciales que normalmente se usan podrán ser usadas también, bueno al arrastrar algunas tablas les debe quedar algo así:





Con eso ya se puede empezar a trabajar, pero antes revisen un poco las propiedades, si presionan F4 puede observar algunas cosas interesantes, como por ejemplo la conexión que usa, el NameSpace en donde puede ser referenciada, algo asi como lo de abajo:




Bueno como se imaginaran ahora lo que falta es usar la capa de persistencia, la verdad seria desaprovechar todo el potencial de .NET si no lo hago con LinQ, asi es que voy a incluir una clase dentro de la misma librería que hace uso del EF con LinQ y claro voy a explicar, de paso topo un par de nuevas características de C# 3.0:



Ahora vamos a seccionar el método LinQExample para indicar que se hizo:


En las líneas 14 y 15 se encuentra la creación de un nuevo DataContext, como recordaran mas arriba se veian propiedades como por ejemplo el NameSpace en el que se encuentra nuestro DataContext, en este caso BudgetClassesDataContext, en su constructor podemos especificar la cadena de conexión que deseamos usar, en mi caso la saco del archivo de configuración de la aplicación.


En las líneas 16, 17 y 18 se encuentra algo muy interesante, hace tiempo atrás en Visual Basic se podían usar tipos de datos Variant, es decir uno podía guardar cualquier cosa ahí, en C# el tipo var no es lo mismo, se la llama una variable de tipo implícito, es decir el tipo de esta variable es inferido basado en el tipo asignado con esto los programadores no están atados a declarar exactamente que tipo es hasta no instanciar la variable, de paso usamos LinQ, como ustedes saben LinQ es un lenguaje de consultas integrado a los lenguajes .NET el cual permite extraer datos en forma de objetos, no solo se puede actuar como en mi caso sobre el EF si no también sobre ciertos objetos, XML e incluso DataSets!! Es muy parecido al SQL, por no decir igualito, y básicamente se lo usa con un generador que es la clausula from, se la llama generador por que inicia la sentencia, en esta se especifica primero un objeto que representa a una entidad del conjunto sobre la cual se puede trabajar en el resto de la consulta, se le agrega un in para indicar de donde van a ser tomadas las entidades, en nuestro caso del DataContext instanciado y a su ves una clase que representa una tabla especifica de la base de datos, con esto ya especificamos el origen de los datos y un objeto sobre el cual podemos especificar condiciones en la siguiente clausula que es el where, como ustedes ven en la línea 17 el where especifica que de la entidad declarada en el from anterior se tome una propiedad de la misma y se cumpla con una condición, en palabras simples que se escoja las entidades que tengan en Active el valor de 1, para finalmente terminar con un select, en este podemos decir si se toma todas las propiedades de la entidad o solo algunas, en mi caso al poner solo el nombre de la entidad se traduce en un select *, esto retorna en este caso una lista de un tipo FiscalPeriod que es un tipo generado por el EF que representa una tabla y estas entidades cumplen con la condición de que el valor de la propiedad Active sea igual a 1.


Listo!! Pero esperen, si ejecutan esto o un ejemplo propio suyo paso a paso resulta que esto funciona muy rápido!! Es sospechoso verdad?? Pues esta correcto, LinQ ejecutara realmente la consulta la primera vez que se use el objeto resultante de la consulta, es decir en la línea 21, que ganamos?? Pues velocidad en el procesamiento y es oportuno además, claro que la línea 21 no es un buen ejemplo de cómo se debe programar en .NET pero es tan solo un ejemplo….


Espero que esta breve guía les sirva y puedan empezar a utilizar LinQ y el EF, realmente es algo muy prometedor y ayuda a reducir aun mas los tiempos de desarrollo, esperemos que tenga un buen futuro!!!

0 comments: