ADO.NET Entity Framework

.Net, ADO.NET Add comments

Hace más o menos un año, en mi anterior  @ empresa,  cuando me encontraba en una situación de “Entre Proyectos”, se me asignó la tarea de investigar el Framework NHibernate y desarrollar  un proyecto Interno, para demostrar la valía del Framework .

La verdad es que ya había tenido un primer contacto con el padre de NHibernate, es decir Hibernate, por lo que el proyecto me resulto interesante. Como idea, prometía. El resultado no me resultó del todo satisfactorio. No vi el framework totalmente integrado con .Net. Desde mi punto de vista el uso  de NHibernate para el desarrollo de un proyecto serio en .Net no aporta ventajas frente al uso de la capa DAO tradicional.

Ahora con la aparición de ADO.NET Entity Framework  me ha vuelto a picar la curiosidad.

¿Qué es ADO.NET Entity Framework?

Para definir al Entity Framework me voy a basar en una definición del modelo entidad-relacion. En el modelo entidad-relacion tal y como lo conocemos, tenemos que implementar un conjunto de clases que definen el modelo conceptual de la base de datos y tenemos que definir la capa de acceso a datos, de tal manera que sea esta la encargada de acceder a la base de datos y mapear los datos en las clases creadas para tal efecto.

Manteniendo esta definición en mente, definimos el Entity Framework como un modelo entidad-relación ejecutable, (misma definición para NHibernate).  El Entity Framework nos permite trabajar con los objetos definidos a partir del modelo de datos sin tener que preocuparnos de la capa de acceso a datos ya que él se encarga automáticamente de su persistencia.

Formas de Acceder al modelo de datos.

Antes de enunciar las distintas formas de acceder al modelo de datos, tenemos que comentar que las tres hacen uso de un nuevo proveedor de datos definido en ADO.NET. Este proveedor esta definido de forma similar a los otros ya disponibles, del modo que tenemos una clase  EntityConection para definir el origen de datos y una clase  EntityCommand sobre el que definiremos la consulta a ejecutar.

C#:
  1. string city = “Motril”;
  2. using (EntityConnection cn =
  3.     new EntityConnection(“Name=España”))
  4. {
  5.     cn.Open();
  6.     EntityCommand cmd = cn.CreateCommand();
  7.     cmd.CommandText =
  8.          “SELECT VALUE c FROM Esapaña.Ciudades “ +
  9.          “AS c WHERE c.ciudad = @ciudad”;
  10.     cmd.Parameters.AddWithValue(“ciudad”, ciudad);
  11.     DbDataReader rdr = cmd.ExecuteReader(
  12.         CommandBehavior.SequentialAccess);
  13.     while (rdr.Read())
  14.         Console.WriteLine(rdr[“Ciudad”].ToString());
  15.     rdr.Close();
  16. }
  17. <p align="justify">

Si nos fijamos el resultado es un objeto DbDataReader. En esta consulta estamos operando sobre un Entity Data Model  (EDM) “España”, y una Entity (EntitySet) “Ciudades”.

A partir del nuevo proveedor de datos tenemos tres posibilidades para acceder a nuestro modelo de datos:
 

Entity Framework

EntitySQL, es un nuevo lenguaje de consultas como hemos visto en el ejemplo anterior (idea parecida al HSQL de Nhibernate).

 Servicios del Objeto: A diferencia del anterior,  de esta forma conseguimos que el resultado de nuestra consulta sea un conjunto de objetos de nuestro modelo, sobre el que podremos realizar una navegación de acuerdo al EDM definido (“Ciudad” -> “Barrio”). Además conseguiremos persistencia de los datos, ya que los cambios que hagamos sobre los objetos pueden ser mantenidos en la base datos automáticamente.

C#:
  1. string city = “Motril”;
  2. ObjectQuery&lt;Ciudades&gt; query = españa.CreateQuery&lt;Ciudades&gt;(
  3.     “SELECT VALUE c FROM Ciuadades AS c WHERE .ciudad   @ciudad”,
  4.      new ObjectParameter(“ciudad”, ciudad));
  5. foreach (Ciuadades c in query) Console.WriteLine(c.Ciudad);

LINQ to Entities: Es otra forma de obtener objetos del modelo, pero usando la sintaxis de LINQ en vez de EntitySQL.

C#:
  1. string city = “Motril”;
  2. var query = from c in esapañaContext.Ciudades
  3.             where c.ciudad == ciudad
  4.             select c;
  5. foreach (Ciudades c in query) Console.WriteLine(c.ciudad);

Por último, veamos los ficheros que se van a  generar al definir  un EDM con Visual Studio:

  • CSDL: define las entidades y sus relaciones tal  y como la capa de negocio  las conoce.

  • SSDL: Define el esquema de tablas de la base de datos en un modelo lógico mediante XML

  • MSL: Fichero intermedio que sirve para mapear ambos esquemas.

El asistente además de generar estos ficheros  de definición de nuestra base de datos, también crea un fichero por cada una de las tablas / clases que identifica.

Modelo Datos

Para terminar esta primera aproximación con el Entity Framework, y como el artículo lo comencé con una opinión del framework NHibernate, voy a plantear una serie de artículos en el que voy a desarrollar un pequeño proyecto, haciendo uso del Entity Framework, con nombre en clave “Mapa de conocimientos de Vicious Team”, de tal manera que pueda cofrontar una opinión mas certera de los dos framework aquí mencionados.

Si queremos saber mas sobre ADO.NET Entity Framework.

De especial interés este otro articulo.

3 Responses to “ADO.NET Entity Framework”

  1. Mithdraug Says:

    En mi anterior @ empresa también yo tuve que lidiar con las “bondades” de NHibernate. Coincido contigo en que en un proyecto de cierta envergadura, sobre todo si no se tiene control del servidor (web y de BBDD), NHibernate puede convertirse en un infierno. En ocasiones persistía datos sin necesidad, o mantenía el estado de los objetos hasta que el servidor era reiniciado (tras una solicitud a la persona que tenía el control sobre el mismo, lo que entorpecía el trabajo). En cualquier caso, a mí también me dió la sensación de faltarle bastante para estar completamente integrado con el .NET Framework.

    El ADO.NET Entity Framework parece más de lo mismo, pero mejor. Por un lado, porque al tratarse de un producto Microsoft es de esperar que lo haya integrado de una forma consistente con el Framework “principal”. Por otro, porque han debido aprender de la experiencia de NHibernate. En cualquier caso, parece bastante robusto, y la posibilidad de usar LINQ y tipos anónimos con el Entity Framework le hace idóneo para contar con él en los proyectos que se desarrollen con .NET 3.5.

    A ver con qué nos sorprendes en los siguientes artículos. Saludos.

  2. admin Says:

    Por casualidad su anterior @ empresa ¿no sería la misma que mi anterior @ empresa?. Espero su ayuda para el proyecto de “Mapa de conocimientos de Vicious Team” puesto que usted forma parte de él.

  3. Mithdraug Says:

    Todo es posible en la viña del Señor. Somos racimos cosechados en su infinita gracia, y pudimos caer en el mismo cesto en alguna ocasión. Como buenas uvas, fermentamos en la misma barrica para ser, finalmente, embotellados por separado, pero guardando la misma esencia. Mi empres@, por tanto, pudo ser la misma que la suya.

    Respecto al Mapa de Conocimientos, cuando quieras nos ponemos con ello :)

    Saludos.

Leave a Reply

WP Theme & Icons by N.Design Studio
Entries RSS Comments RSS Acceder

Switch to our mobile site