ADO.NET Entity Framework: Algunos detalles (II)!

Siguiendo con las pruebas de ADO.NET Entity Framework (ADO.NET EF) comenzadas en este post, en esta nueva entrega vamos a hablar de uno de los elementos de EF: Entity Client. Se trata de un nuevo proveedor de datos que aparece con EF y que permite realizar consultas a entidades de un modelo conceptual. Para ello emplea el lenguaje Entity SQL (eSQL) que permite realizar consultas al modelo independientemente de la tecnología de base de datos subyacente. Empecemos.

Entity Client

Lo primero que tenemos que hacer es añadir una referencia al  espacio de nombres EntityClient.

 image

Añadimos las correspondientes sentencias using relativas a los espacios System.Entity y System.Data:

using System.Data;

using System.Data.EntityClient;

A continuación vamos a definir una consulta al EDM mediante Entity Client:

            var ecConexion =

                new EntityConnection();

 

            ecConexion.ConnectionString = “Name=AdventureWorksLTContext”;

            var ecComando = ecConexion.CreateCommand();

            ecComando.CommandText

                = “SELECT VALUE p from AdventureWorksLTContext.Product AS p”;

            ecConexion.Open();

 

            var ecReader =

                ecComando.ExecuteReader(CommandBehavior.SequentialAccess);

 

            Console.WriteLine(“******Query******”);

            Console.WriteLine(ecComando.ToTraceString());

            Console.ReadLine();

            Console.WriteLine(“******Resultados******”);

 

            while (ecReader.Read())

            {

                Console.WriteLine(“Producto: {0}”, ecReader[“Name”]);

            }

 

            ecConexion.Close();

            Console.ReadLine();

Como vemos, lo que estamos haciendo en el código anterior es:

  • Definir una instancia de EntityConnection que representa la conexión al EDM. Esta conexión está plenamente identificada por el nombre del EntityContainer (AdventureWorksLTContext), si bien podríamos especificar la cadena de conexión completa (referenciar a las tres capas que constituyen el EDM). Sin embargo, no necesitamos especificar la cadena de conexión completa dado que el EDM está en el mismo ensamblado que el consumidor.
  • Definimos una instancia del objeto EntityCommand que representa la consulta que vamos a realizar al modelo. Esta consulta la estamos definiendo en Entity SQL (eSQL). De esta consulta destacaría que usa la palabra clave VALUE, lo que le indica al runtime que no envuelva el resultado de la consulta como una fila e datos.
  • Abrimos la conexión al modelo.
  • Ejecutamos el comando mediante un objeto de tipo EntityDataReader.
  • Mediante reflexión y el método ToTraceString, obtenemos la consulta que se envía a la BD subyacente al modelo.
  • Leemos el resultado de la ejecución del comando mediante el método Read() del objeto EntityReader.
  • Cerramos la conexión al modelo.

Tras ejecutar el código anterior:

  • Por un lado, tenemos la consulta enviada a la BD.
  • Por otro, tenemos el resultado de la consulta.
image image

Al igual que ocurre con T-SQL convencional, eSQL permite definir consultas parametrizadas. Por ejemplo, podemos realizar una consulta sobre la entidad Product aplicando un filtro a la columna Name:

            Console.ReadLine();

            Console.WriteLine(“******Consulta parametrizada******”);

            ecComando.Dispose();

            ecComando = ecConexion.CreateCommand();

            ecComando.CommandText =

                “SELECT p.Name FROM AdventureWorksLTContext.Product AS p ” +

                “WHERE Length(p.Name)>@iLongitud”;

            ecComando.Parameters.AddWithValue(“iLongitud”, 30);

 

            ecReader =

                ecComando.ExecuteReader(CommandBehavior.SequentialAccess);

 

            Console.WriteLine(“******Query******”);

            Console.WriteLine(ecComando.ToTraceString());

            Console.ReadLine();

            Console.WriteLine(“******Resultados******”);

 

            while (ecReader.Read())

            {

                Console.WriteLine(“Producto: {0}”, ecReader[“Name”]);

            }

 

            ecConexion.Close();

            Console.ReadLine(); 

Como vemos en el código anterior:

  • En primer lugar liberamos los recursos que usa el objeto EntityCommand.
  • Creamos un nuevo comando que utiliza un parámetro.
  • Le añadimos el parámetro al EntityCommand a través de la definición de un EntityParameter.
  • Ejecutamos la consulta.
  • Mostramos la consulta enviada.
  • Ejecutamos la consulta.

Los resultados obtenidos en este caso son los siguientes:

image image

Como veis, la API EntityClient permite crear rápidamente consultas a un EDM utilizando un estilo similar al tradicional ADO.NET.

Otro proveedor + para ADO.NET Entity Framework: SQLite!

Si el otro día hablábamos de los primeros proveedores de terceros para ADO.NET Entity Framework (ADO.NET EF) implementados por la Devart, hoy os presento otro proveedor más que ya incluye también soporte para ADO.NET EF. Se trata de SQLite y podéis ver los detalles de este proveedor en este enlace.

Supported Platforms

Como podréis comprobar en el enlace anterior, SQLite es un proveedor preparado para facilitar el acceso a la base de datos SQLite, y en su nueva versión incluye el siguiente soporte para ADO.NET EF (soporte en beta). También destacaría de este proveedor el hecho de que no dependa de .NET Framework en cuanto a que se puede distribuir de manera independiente.

ADO.NET Entity Framework: Algunos detalles (I)!

Estos días he estado probando el SP1 de Visual Studio 2008 (VS 2008) y .NET Framework 3.5 jugando con los ejemplos que vienen con el .NET Framework 3.5 Enhancements Training Kit. Lo primero que he probado es ADO.NET Entity Framework (ADO.NET EF), y entre prueba y prueba, y lectura y lectura he ido conociendo algunos detalles sobre aspectos relativos a los distintos elementos que constituyen esta tecnología. La idea de este post y los siguientes es iros contando esos pequeños detalles. Empecemos.

Detalles del EDM Designer

Como sabéis, a la hora de construir un Entity Data Model (EDM) de ADO.NET EF disponemos del EDM Designer que con el SP1 de VS 2008 ya viene integrado en el IDE. En este punto, es importante entender que perspectiva tenemos en VS 2008 de un EDM:

  • El EDM Designer nos muestra las entidades de nuestro modelo desde un punto de vista conceptual. Estamos hablando por tanto de entidades de negocio, que no tienen por qué seguir una descripción fiel de la información que tenemos en la base de datos.
  • A través de la ventana de propiedades del EDM:
    • Podemos cambiar el nombre del Entity Container que tiene que ser único.
    • Podemos establecer el modo en el que los artefactos del modelo son creados por defecto:
      • Embebidos en el ensamblado (opción que viene habilitada por defecto).
      • Copy to output directory, lo que producirá los tres ficheros XML que constituyen un EDM.
  • Además de poder ver el modelo como un diagrama, podemos ver la jerarquía del mismo mediante el Model Browser.
image image image

El Model Browser permite visualizar aspectos que no son visibles de manera directa con el Designer:

  • Una perspectiva detallada del lado conceptual del modelo a través de:
    • Los Entity Types, que representan las entidades conceptuales que se encuentran mapeadas en entidades a nivela de almacenamiento.
    • Los Entity Sets, que representan contenedores o colecciones de Entity Types.
    • Las Associations, que permiten relacionar entidades entre si.
    • Los Associations Sets, que represnetan contenedores o colecciones de Associations.

image

  • Las funciones mapeadas.
  • Y la perspectiva de almacenamiento (storage) del modelo. Esta perspectiva se puede ver a través de la sección .Store del Model Browser:

image

Una pregunta que nos puede venir a la cabeza es si el EDM es algo estático y no modificable…la respuesta clara es que no. Podemos modificar distintas partes de un EDM a través de la ventana de propiedades de VS 2008. Por ejemplo, para modificar un Entity Type:

image 

Otro aspecto muy importante es que desde el Model Browser podemos actualizar en todo momento nuestro EDM:

  • Utilizamos la opción Update Model from Database…
  • Elegimos que queremos hacer: Añadir, borrar o actualizar tablas, vistas o procedimientos almacenados.
image image image

Y hasta aquí este primer post sobre detalles de ADO.NET EF. Conforme vaya viendo más cosas, espero ir publicándolas en el blog.

Liberados los primeros proveedores de terceros para ADO.NET EF!

El equipo de ADO.NET Entity Framework (ADO.NET EF) acaba de anunciar los primeros proveedores de terceros que soportan ADO.NET EF, y por lo tanto soportan .NET Framework 3.5 SP1 y Visual Studio 2008 SP1. Estos proveedores han sido liberados por la empresa Devart (antes Core Labs) y están preparados para permitir el acceso desde ADO.NET EF a Oracle, MySQL y PostgreSQL.

Podéis obtener información adicional sobre estos proveedores en esta página de Devart. En cuanto a los enlaces de descarga de los tres proveedores:

La verdad es que los proveedores tienen muy buena pinta y como muestra aquí tenéis las toolbox de cada uno de ellos.

image image image

Actualizados los ejemplos + Proveedores de Terceros de ADO.NET Entity Framework!

Una de las novedades más importantes que forman parte de la reciente release del SP1 de .NET Framework 3.5 y Visual Studio 2008 es la inclusión de la RTM de la primera versión de ADO.NET Entity Framework (ADO.NET EF). Pues bien, el equipo de ADO.NET nos anuncia a través de su blog de que ya tenemos disponibles  la actualización de los ejemplos para la RTM de ADO.NET EF. Podéis acceder a los ejemplos y las correspondientes descargas en este enlace.

Además de la actualización de los ejemplos de ADO.NET EF, en otro post del blog del equipo de ADO.NET se anuncia los proveedores de terceros que se están desarrollando para la RTM de ADO.NET EF. Estos proveedores son:

  • Para los dos últimos trimestres de 2008, tendremos los siguientes proveedores:
    • Devart (formerly Core Lab) – Providing connectivity to Oracle, MySQL, PostgreSQL and SQLite databases.
    • Firebird – Providing connectivity to Firebird databases.
    • IBM – Providing connectivity to both IBM DB2 data server and Informix Dynamic Server (IDS) database.
    • Npgsql – Providing connectivity to PostgreSQL database versions 7.3+ and 8.x.
    • OpenLink Software – Providing connectivity to OpenLink Virtuoso, Oracle, Informix, Ingres, Sybase, MySQL, PostgreSQL, DB2, Progress and Microsoft SQL Server databases, and any data source accessible via OpenLink ODBC or JDBC bridge drivers.
    • Phoenix Software Solutions – Providing connectivity to SQLite databases.
    • Sun Microsystems – Providing connectivity to MySQL databases.
    • Sybase – Providing connectivity to SQL Anywhere databases.
    • VistaDB Software – Providing connectivity to VistaDB database.
  • Para principios de 2009 están previstos los siguientes proveedores:
    • Synergex – Providing connectivity to Synergy/DE databases.
  • Otros posibles:
    • DataDirect Technologies – Providing connectivity to multiple data stores including Oracle, Sybase, Microsoft SQL Server and DB2 via DataDirect Connect® for ADO.NET. 

Materiales del evento – La revolución en el acceso a datos: ADO.NET Entity Framework!

Ya tenéis disponibles para descarga los materiales de la gran sesión sobre ADO.NET Entity Framework que hemos tenido gracias a Unai. Los materiales (la presentación y las demos) los podéis descargar de este enlace de la página del grupo de usuarios .NET de Cantabria, Nuberos.Net…ya de paso, aprovecho para animaros a que os déis de alta como usuarios y así podáis estar al tanto de las novedades en el grupo en cuanto a eventos que organicemos, noticias y post que se publiquen, etc…respecto al evento, la verdad es que ha estado genial gracias a Unai que nos ha sabido mostrar en profundidad de que va esto de ADO.NET EF y que nos ha demostrado (le pese a quien le pese) que hoy por hoy es una de las personas que mejor conoce, al menos en España, ADO.NET EF en todos sus niveles y en todos su elementos…como ha comentado Unai, han sido 8 horas en las que además de poder conocer los detalles sobre ADO.NET EF, los asistentes han planteado sus dudas y cuestiones…y sinceramente, creo que todos hemos quedado muy satisfechos en cuanto a qué se puede hacer con ADO.NET EF v1, dónde se queda corto, las mejoras que vendrán con la v2, el hecho de que ADO.NET EF sin duda va a ser la tecnología de acceso a datos del futuro para muchos de nosotros y para la propia Microsoft (tendrá cabida en SQL Server Reporting Services, en la plataforma SharePoint, etc.)…Agradecer de nuevo a Unai el que haya participado en esta jornada, y estoy convencido de que pronto le tendremos de vuelta por Cantabria para hablar más sobre las excelencias de ADO.NET EF…también me gustaría agradecer el alto grado de participación de los asistentes planteando sus problemas, dudas que les plantean ADO.NET EF…y sobre todo, que parece que muchos van a apostar por ADO.NET EF en sus desarrollos lo que sin duda es una buena noticia.

ADO.NET EF:…las novedades no paran!

He comentado muchas veces que la velocidad de crucero que ha cogido Microsoft es imposible de seguir, y el caso es que de cuando en cuando, y para agudizar aún más el vértigo tecnológico, los propios equipos de desarrollo de Microsoft me dan la razón…y en este caso, resulta que el equipo de ADO.NET ha empezado ya (desde ayer) a trabajar en la versión 2 de ADO.NET Entity Framework, y esto cuando aún no se ha publicado la RTM de la versión 1…de hecho, en el post en el que Tim Mallalieu nos hace el anuncio ya podemos leer algunas de las novedades que traerá la versión 2 de ADO.NET EF:

  • Ignorar la persistencia, a través de introducir una solución POCO (Plain Old CLR Object) para la gestión e iteración de estado con el objeto ObjectContext de ADO.NET EF.
  • Soporte para N-Capas, extendiendo el soporte de serialización de entidades de la versión 1 (mediante contratos de datos o bien con ADO.NET Data Services)  mediante una modelo similar al que conocemos para los DataSet, y que habilitará el soporte de grafos remotos y cambios en los mismos mediante servicios WCF estándar.
  • Mejores capacidades de mapping a la hora de trabajar con EF.
  • Escenarios TDD,  gracias a la introducción de clases POCO se facilitarán los escenarios TDD.
  • Facilitar la definición de relaciones en el  modelo más allá del soporte de relaciones de tipo bidireccional de la versión 1.
  • Lazy loading, ahora mismo se soporta lazy laoding de tipo explícito (.Load)…la idea es disponer también de lazy loading implícito.
  • Reescritura de árboles de consultas para permitir que los desarrolladores puedan definir filtros verticales u horizontales en los resultados de las consultas.

Además del anuncio del inicio de desarrollo de la versión 2 de ADO.NET EF, en el blog del equipo de ADO.NET podemos encontrar otra interesante novedad: ya tenemos disponible en The Code Gallery un proveedor de ADO.NET EF para Oracle. Podéis encontrar más información y ejemplo sobre el proveedor de Orable para ADO.NET EF en el blog de Jaroslaw Kowalski.