Introducción a ADO.NET Entity Framework (2)

25/06/2012

Continuamos el post que iniciamos de introducción a ADO.NET Entity Framework (1), recordando el asistente ADO.NET Entity Data Model de Visual Studio 2010 que nos permite generar el modelo de entidades de forma visual y muy sencilla.  Partimos de que ya tenemos generado el modelo a partir de la base de datos ya existente, o en blanco y regenerando la base de datos con los scripts, y que tenemos una clase  gestionEntities que nos permite acceder al objectContext.

Para trabajar con nuestro modelo, lo primero que hacemos es crearnos una nueva clase en VB.NET denominada AccesoDatos que contendrá todo el acceso al modelo de datos. En dicha clase vamos a crear varias funciones: ObtenerContactos, NuevoContacto, BorrarContacto, CambiarContacto. Definamos primero la de ObtenerContactos().

Función Obtener Contactos

Función Obtener Contactos

Esta función lo que nos permite es obtener un listado de los contactos de nuestra base de datos y sus actividades relacionadas. Para ello, inicialmente, instanciamos el ObjectContext con la clase gestionEntities. Después instanciamos un objeto de tipo ObjectQuery que va a contener un conjunto de objetos de tipo Contacto, indicándolo en gestionEntities.Contactos. Después instanciamos un objeto de tipo IQueryable que nos permite lanzar una consulta de tipo LinQ sobre nuestro modelo. En concreto le decimos que obtenga el conjunto de contactos. Para ejecutar la consulta utilizamos el método ToList y en resultado tendremos la lista de nuestros contactos.

Una vez tenemos la lista de nuestros contactos, podemos recorrerla con un bucle de tipo For Each. A medida que vamos recorriendo los contactos, accedemos a sus Actividades. Fijémonos que podemos acceder a cada Actividad del Contacto porque tenemos una relación 1 a muchos en nuestro modelo. Esto lo podemos hacer usando Contacto.Actividads. Este acceso a las actividades de los contactos se hace en ese preciso instante, osea no cuando se cargaron los contactos. Esto es lo que se denomina en .NET Carga perezosa o diferida (Lazy Loading). La idea es cargar siempre la mínima información del modelo en memoria, osea sólo los Contactos y en caso de que queramos cargar sus actividades relacionadas, es en ese momento que las cargamos. Si por algún motivo no accedemos a ellas, no las cargamos. Finalmente sacamos por línea con WriteLine los datos obtenidos.

La última sentencia de la función es de loggeo/trazado que aunque no la utilicemos normalmente conviene conocerla. En esta última sentencia, llamamos al método ToTraceString de la consulta, lo cuál nos permite ver la sentencia SQL que está corriendo por debajo del modelo. En el fondo, cuando persistimos objetos en el ObjectContext o cuando obtenemos objetos, estamos haciendo sentencias de SQL contra la base de datos. Si por temas de debug, necesitamos ver dichas sentencias, el método ToTraceString permite obtener dichas SQL.

Definamos ahora la función NuevoContacto()

Función Nuevo Contacto

Función Nuevo Contacto

Esta función nos permite crear nuevos contactos. Primero de todo, instanciamos el modelo de objetos y nuestro ObjectContext. Una vez instanciado, para crear un nuevo contacto simplemente creamos un nuevo objeto de tipo Contacto con New y configuramos sus propiedades tal como el id, nombre, teléfono y edad. Una vez creado nos queda persistirlo, osea almacenarlo en la base de datos. Para ello hay que hacer dos pasos: añadirlo al modelo y guardar los cambios.

– Añadir al modelo de datos: Una vez creado un objeto, tal como el contacto, debemos añadirlo a nuestro ObjectContext. Para ello utilizamos la sentencia AddToContactos y le pasamos el contacto nuevo creado. Esto permite enlazar el objeto nuevo creado con nuestro ObjectContext.

– Guardar los cambios: Una vez tenemos el objeto añadido al ObjectContext, sólo queda guardar los cambios que se hayan hecho en el ObjectContext a la base de datos. Eso se hace con el método SaveChanges.

Definamos ahora la función CambiarContacto()

Función Cambiar Contacto

Función Cambiar Contacto

Esta función nos permite modificar un contacto. Para ello, como siempre, primero instanciamos el modelo de datos, obteniendo el ObjectContext con la clase gestiónEntities. Después definimos un objeto de tipo EntityKey el cuál nos permite definir un objeto a través de su tipo, una propiedad y un valor, normalmente la clave primaria. Una vez definido el EntityKey, recuperamos el objeto que queremos modificar con la función GetObjectByKey la cuál nos permite recuperar el objeto contacto de la base de datos, usando su clave primaria o Key y asociarlo al ObjectContext. Puesto que ya está asociado/enlazado (fijémonos que cuando creábamos el objeto de nuevo no estaba enlazado y había que enlazarlo), sólo nos queda cambiar la propiedad que queramos, en este caso el teléfono y almacenar los cambios del ObjectContext con SaveChanges.

Nos queda la función de BorrarContacto() la cuál se encarga de borrar un Contacto.

Función Borrar Contacto

Función Borrar Contacto

Fijémonos que el borrado de un objeto en EF es similar a la modificación:

Primero instanciamos el ObjectContext con la clase gestionEntities, y buscamos el Contacto que queremos borrar con la función TryGetObjectByKey. Una vez tenemos ya el objeto recuperado, utilizamos la función DeleteObject pasándole como parámetro el objeto recuperado para borrarlo del ObjectContext. Para persistir el modelo, simplemente llamamos al SaveChanges.

Para probar todas estas funciones, creamos un nuevo módulo de VB.NET y llamamos a estas funciones a partir de la clase AccesoDatos que contiene todo nuestro modelo.

Clase que ejecuta todo el modelo

Clase que ejecuta todo el modelo

La ejecución del programa será así: creará un nuevo contacto y lo persistirá, luego el cambiará el teléfono y también lo persistirá. Más tarde lo borrará y persistirá y finalmente obtendremos todos los contactos existentes y sus actividades.

Ejecución del programa de ejemplo del EF

Ejecución del programa de ejemplo del EF

2 comentarios to “Introducción a ADO.NET Entity Framework (2)”


  1. […] Introducción a ADO.NET Entity Framework (2) « Mi blog técnico Dijo: 25/06/2012 a las 10:21 […]

  2. Roy zabala s. Says:

    Los mas claro que e leido asta este momento mas claro imposible gracias


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: