viernes, 31 de octubre de 2014

Estructuras ORM en .Net Entity Frameworks

Entity Framework. EF (como conoceremos de ahora en adelante a Entity Framework) es un 
ORM para la tecnología .NET. Una de las facilidades que nos da este ORM es la resolución del denominado desajuste de impedancia (o impedance mismatch en inglés). El desajuste de impedancia hace mención a las diferencias existentes entre losmodelos relacionales (base de datos) y los modelos conceptuales implementados en lenguajes de programación orientados a objetos.

Por ejemplo, nosotros modelaremos la Base de datos de una forma distinta a como queramos modelar nuestras clases en el código. Imaginemos que tenemos una tabla con coches y dentro de coches tenemos una variable modelo que dependerá de otra entidad modelos que será otra tabla, pues bien, en el modelo de clases nosotros podemos solo querer una clase de coches y manejar los modelos dentro de la clase coches y no como una clase independiente. Esto es lo que se llama el desajuste de impedancia.


Componentes de EF

 

 

Proveedores de EF

El proveedor facilita la construcción de aplicaciones multi-base de datos. Es quien traduce las sentencias al lenguaje nativo del servidor de BD.

EDM
EDM (Entity Data Model) es la definición del mapeo que creamos entre la base de datos y nuestro modelo conceptual o de entidades.
Para construir y trabajar con nuestro EDM tenemos disponible en VS el diseñador  de modelos (Entity Data Model Designer).
Un modelo se guarda en un fichero con extensión edmx, que a través del lenguaje XML declara 3 secciones (que aunque puede estar en ficheros distintos, la norma es que estén en un solo fichero).
  • SSDL (Storage Schema Definition Language)
    • Describe la base de datos (tablas, vistas, columnas, relaciones, procedimientos almacenados, etc.)
  • CSDL (Conceptual Schema Definition Language)
    • Describe las entidades del modelo y la navegación entre las mismas.
  • MSL (Mapping Schema Language)
    • Define como se relaciona la sección SSDL con la sección CSDL.
    • Esta sección también es conocida como C-S.

Entity Client
Entity Client es un nuevo proveedor de ADO.NET (similar a SqlClient u OracleClient) pero que en vez de trabajar con la base de datos específica (como haría cualquier otro proveedor de ADO.NET, por ejemplo SqlClient con SQL Server, OracleClient con Oracle, etc.), trabaja sobre el modelo de entidades. De este modo, este proveedor se aprovecha del agnosticismo de EF y con una sola sintaxis podemos escribir consultas que no dependen del dialecto de la base de datos subyacente porque ataca directamente al modelo.
Cabe mencionar que serán después los distintos proveedores de EF quienes traduzcan nuestra consulta en Entity Client al dialecto de la base de datos específica.
Entity Client utiliza un lenguaje específico para consultar el modelo de entidades, que se llama Entity SQL o eSQL. eSQL pretende ser un dialecto parecido al T-SQL de toda la vida, pero mejorando ciertos aspectos relacionados con el modelo, como la navegabilidad, los tipos, etc.
La verdad es que no es muy utilizado.

Object Services
Ya sea utilizando eSQL o LINQ to Entities, está claro que el proveedor de EF de turno traducirá nuestra consulta al lenguaje específico de la base de datos y devolverá los resultados en formato tabular, el formato de toda la vida, esto es filas-columnas. Para pasar este formato a nuestros objetos el proceso se conoce como materialización. Es decir, la materialización es la transformación de los resultados obtenidos a través del proveedor de EF en objetos de las distintas clases que existen en nuestro modelo. Esta materialización es automática.

LINQ to Entities o L2E
Es el proveedor de LINQ para EF.
L2E está construido sobre Object Services, por lo que funcionará perfectamente la materialización.
Con todo lo expuesto aquí te puede servir para poner en orden ciertos conceptos básicos sobre EF y sobre todo, sentir la necesidad de integrar un ORM en tus proyectos.
Si quieres un ejemplo gráfico de como empezar esta tecnología puedes ir a
http://programacion.net/articulo/entity_framework_713

o a http://www.entityframeworktutorial.net/EntityFramework5/entity-framework5-introduction.aspx

No hay comentarios:

Publicar un comentario