Entity Framework

Entity Framework

enero 3, 2017

— Publicado en Development

Entity Framework

Entity Framework es un conjunto de tecnologías de ADO.NET que permiten el desarrollo de aplicaciones de software orientadas a datos. Los arquitectos y programadores de aplicaciones orientadas a datos se han enfrentado a la necesidad de lograr dos objetivos muy diferentes. Deben modelar las entidades, las relaciones y la lógica de los problemas empresariales que resuelven, y también deben trabajar con los motores de datos que se usan para almacenar y recuperar los datos. Los datos pueden abarcar varios sistemas de almacenamiento, cada uno con sus propios protocolos; incluso las aplicaciones que funcionan con un único sistema de almacenamiento deben equilibrar los requisitos del sistema de almacenamiento con respecto a los requisitos de escribir un código de aplicación eficaz y fácil de mantener.

Entity Framework permite a los desarrolladores trabajar con datos en forma de objetos y propiedades específicos del dominio, como clientes y direcciones de cliente, sin tener que preocuparse por las tablas y columnas de la base de datos subyacente donde se almacenan estos datos. Con Entity Framework, los desarrolladores pueden trabajar en un nivel mayor de abstracción cuando tratan con datos, y pueden crear y mantener aplicaciones orientadas a datos con menos código que en las aplicaciones tradicionales. Dado que Entity Framework es un componente de .NET Framework, las aplicaciones de Entity Framework se pueden ejecutar en cualquier equipo en el que esté instalado .NET Framework a partir de la versión 3.5 SP1.

 

Las siguientes secciones de este tema proporcionan más detalles sobre Entity Framework:

  • Dar vida a los modelos.
  • Asignar objetos a datos.
  • Obtener acceso a los datos de entidad y cambiarlos.
  • Proveedores de datos.
  • Herramientas de Entity Data Model.
  • Obtener más información.

Dar vida a los modelos

Un enfoque de diseño habitual para crear una aplicación o un servicio consiste en dividir la aplicación o el servicio en tres partes: un modelo de dominio, un modelo lógico y un modelo físico. El modelo de dominio define las entidades y relaciones del sistema que se está modelando. El modelo lógico de una base de datos relacional normaliza las entidades y relaciones en tablas con restricciones de claves externas. El modelo físico abarca las capacidades de un motor de datos determinado especificando los detalles del almacenamiento en forma de particiones e índices.

Los administradores de bases de datos refinan el modelo físico para mejorar el rendimiento, pero los programadores que escriben el código de la aplicación principalmente se limitan a trabajar con el modelo lógico escribiendo consultas SQL y llamando a procedimientos almacenados. Los modelos de dominio se suelen usar como una herramienta para capturar y comunicar los requisitos de una aplicación, con frecuencia como diagramas inertes que se ven y se explican en las primeras etapas de un proyecto, y a continuación se abandonan. Muchos equipos de desarrolladores omiten la creación de un modelo conceptual y comienzan especificando las tablas, columnas y claves en una base de datos relacional.

 

Entity Framework da vida a los modelos conceptuales permitiendo a los programadores consultar las entidades y relaciones en el modelo de dominio (denominado modelo conceptual en Entity Framework) al tiempo que se basan en Entity Framework para traducir esas operaciones en los comandos específicos del origen de datos. Esto libera a las aplicaciones de las dependencias codificadas de forma rígida en un origen de datos determinado.

 

Al trabajar con Code First, el modelo conceptual se asigna al modelo de almacenamiento en código. Entity Framework puede deducir el modelo conceptual basado en los tipos de objeto y configuraciones adicionales que define. Los metadatos de asignación se generan durante el tiempo de ejecución basándose en una combinación de cómo se definen los tipos de dominio e información de configuración adicional que se proporciona en código. Entity Framework genera la base de datos como sea necesario basándose en los metadatos. Para obtener más información, vea Crear y asignar un modelo conceptual.

 

Cuando se trabaja con las Herramientas de Entity Data Model, el modelo conceptual, el modelo de almacenamiento y las asignaciones entre los dos se expresan en esquemas basados en XML y se definen en archivos que tienen extensiones de nombre correspondientes:

 

  • El lenguaje de definición de esquemas conceptuales (CSDL) define el modelo conceptual.CSDL es la implementación de Entity Framework del Entity Data Model. La extensión de archivo es .csdl.
  • El lenguaje de definición de esquemas de almacenamiento (SSDL) define el modelo de almacenamiento, que también se denomina modelo lógico.La extensión de archivo es .ssdl.
  • El lenguaje de especificación de asignaciones (MSL) define las asignaciones entre los modelos conceptual y de almacenamiento.La extensión de archivo es .msl.

 

El modelo de almacenamiento y las asignaciones pueden cambiar según sea necesario sin requerir cambios en el modelo conceptual, las clases de datos o el código de la aplicación. Dado que los modelos de almacenamiento son específicos del proveedor, puede trabajar con un modelo conceptual coherente a través de varios orígenes de datos.

Entity Framework utiliza estos modelos y archivos de asignación para transformar las operaciones de creación, lectura, actualización y eliminación de las entidades y relaciones del modelo conceptual en las operaciones equivalentes en el origen de datos. Entity Framework incluso permite asignar las entidades del modelo conceptual a los procedimientos almacenados en el origen de datos. Para obtener más información, consulta Especificaciones CSDL, SSDL y MSL.

 

Asignar objetos a datos

 La programación orientada a objetos supone un desafío al interactuar con sistemas de almacenamiento de datos. Aunque la organización de clases suele reflejar la organización de las tablas de bases de datos relacionales, el ajuste no es perfecto. Varias tablas normalizadas suelen corresponder a una sola clase y las relaciones entre las clases se representan a menudo de forma diferente a las relaciones entre tablas. Por ejemplo, para representar el cliente de un pedido de ventas, una clase Order podría utilizar una propiedad que contiene una referencia a una instancia de una claseCustomer, mientras que una fila de la tabla Order en una base de datos contiene una columna de clave externa con un valor que corresponde a un valor de clave principal en la tabla Customer (o conjunto de columnas). Una clase Customer podría tener una propiedad denominada Orders que contuviera una colección de instancias de la clase Order, mientras que la tabla Customer en una base de datos no tiene ninguna columna comparable. Entity Framework proporciona a los desarrolladores de software la flexibilidad para representar las relaciones de esta manera, o para modelar más estrechamente las relaciones tal como se representan en la base de datos.

Las soluciones existentes han intentado cubrir este hueco, que se suele denominar “desigualdad de impedancia”, asignando únicamente clases y propiedades orientadas a objetos a las tablas y columnas relacionales. En lugar de seguir este enfoque tradicional, Entity Framework asigna las tablas relacionales, columnas y restricciones FOREIGN KEY de los modelos lógicos a las entidades y relaciones de los modelos conceptuales. Esto permite una mayor flexibilidad al definir los objetos y optimizar el modelo lógico. Las herramientas de Entity Data Model generan clases de datos extensibles según el modelo conceptual. Se trata de clases parciales que se pueden extender con miembros adicionales que el programador agrega. De forma predeterminada, las clases que se generan para un modelo conceptual determinado derivan de las clases base que proporcionan servicios para materializar las entidades como objetos y para realizar un seguimiento de los cambios y guardarlos. Los desarrolladores pueden utilizar estas clases para trabajar con las entidades y relaciones como objetos relacionados mediante asociaciones. Los desarrolladores también pueden personalizar las clases que se generan para un modelo conceptual. Para obtener más información, vea Trabajar con objetos.

 

Obtener acceso a los datos de entidad y cambiarlos

 Como algo más que otra solución de asignación objeto-relacional, Entity Framework trata fundamentalmente de permitir que las aplicaciones obtengan acceso y cambien los datos que están representados como entidades y relaciones en el modelo conceptual. Entity Framework usa la información de los archivos del modelo y de asignación para traducir las consultas de objeto con los tipos de entidad que se representan en el modelo conceptual en consultas específicas del origen de datos. Los resultados de la consulta se materializan en objetos que Entity Framework administra. Entity Framework proporciona las maneras siguientes de consultar un modelo conceptual y devolver objetos:

 

  • LINQ to Entities. Proporciona compatibilidad con Language-Integrated Query (LINQ) para consultar los tipos de entidad que se definen en un modelo conceptual.Para obtener más información, consulta LINQ to Entities.
  • Entity SQL. Un dialecto de SQL, independiente del almacenamiento, que trabaja directamente con entidades del modelo conceptual y que admite conceptos de Entity Data Model.Entity SQL se utiliza tanto con consultas de objeto como con consultas que se ejecutan utilizando el proveedor EntityClient. Para obtener más información, consulta Información general de Entity SQL.

 

El Entity Framework incluye el proveedor de datos de EntityClient. Este proveedor administra las conexiones, traduce las consultas de entidad en consultas específicas del origen de datos y devuelve un lector de datos que Entity Framework usa para materializar los datos de la entidad en los objetos. Cuando no se requiere la materialización de los objetos, el proveedor de EntityClient también se puede utilizar como un proveedor de datos ADO.NET estándar habilitando las aplicaciones para ejecutar consultas Entity SQL y usar el lector de datos de solo lectura devuelto. Para obtener más información, consulta Proveedor de EntityClient para Entity Framework.

El diagrama siguiente muestra la arquitectura de Entity Framework para el acceso a datos:

Entity Framework
Entity Framework

 

Las herramientas de Entity Data Model pueden generar una clase derivada de System.Data.Objects.ObjectContext oSystem.Data.Entity.DbContext que representa el contenedor de entidades definido en el modelo conceptual. Este contexto del objeto proporciona los medios para realizar el seguimiento de los cambios y administrar las identidades, la simultaneidad y las relaciones. Esta clase también expone un método SaveChanges que escribe las inserciones, actualizaciones y eliminaciones en el origen de datos. Al igual que las consultas, estas modificaciones son realizadas bien por los comandos que el sistema genera automáticamente o bien por los procedimientos almacenados que el programador especifica.

 

Proveedores de datos

 

El proveedor EntityClient extiende el modelo de proveedor de ADO.NET teniendo acceso a los datos en lo que respecta a las entidades conceptuales y relaciones. Ejecuta consultas que utilizan Entity SQL. Entity SQL proporciona el lenguaje de consultas subyacente que permite a EntityClient comunicarse con la base de datos. Para obtener más información, consulta Proveedor de EntityClient para Entity Framework.

Entity Framework incluye un proveedor de datos SqlClient actualizado que admite los árboles de comandos canónicos. Para obtener más información, consulta SqlClient para Entity Framework.

 

Herramientas de Entity Data Model

 

Junto con el tiempo de ejecución de Entity Framework, Visual Studio 2012 incluye herramientas de asignación y modelado. Para obtener más información, consulta Modelado y asignación.

 

Share on FacebookTweet about this on TwitterShare on Google+Share on LinkedInPin on PinterestEmail this to someone
Compartir post...