Introducción a 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 programadores trabajar con datos en forma de objetos y propiedades específicos del dominio, por ejemplo, con clientes y direcciones, sin tener que pensar en las tablas de las bases de datos subyacentes y en las columnas en las que se almacenan estos datos. Para ello, se eleva el nivel de abstracción en la que los programadores pueden trabajar al tratar con datos y se reduce el código requerido para crear y mantener las aplicaciones orientadas a datos. Dado que Entity Framework es un componente de .NET Framework, las aplicaciones de Entity Framework se pueden ejecutar en cualquier equipo en que esté instalado .NET Framework 3.5 Service Pack 1 (SP1).

Dar la vida a los modelos conceptuales

Un patrón de diseño antiguo y común para el modelado de datos es la división del modelo en tres partes: un modelo conceptual, un modelo lógico y un modelo físico. El modelo conceptual 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 conceptuales 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 conceptual 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. El modelo conceptual, el modelo de almacenamiento y la asignación entre los dos se expresan en una especificación externa, conocida como el Entity Data Model (EDM). El modelo de almacenamiento y las asignaciones pueden cambiar según sea necesario sin necesidad de cambiar 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.

Un EDM se define con los tres modelos y archivos de asignación siguientes que tienen las extensiones de nombre de archivo correspondientes:

  • Archivo de lenguaje de definición de esquemas conceptuales (.csdl): define el modelo conceptual.

  • Archivo de lenguaje de definición de esquemas de almacenamiento (.ssdl): define el modelo de almacenamiento, que también se denomina modelo lógico.

  • Archivo de lenguaje de especificación de asignaciones (.msl): define la asignación entre los modelos conceptual y de almacenamiento.

Entity Framework utiliza estos modelos y archivos de asignación basados en XML 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. El EDM incluso permite asignar las entidades del modelo conceptual a los procedimientos almacenados en el origen de datos. Para obtener más información, vea Modelado de datos en Entity Framework.

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 minuciosamente, el ajuste no es perfecto. Varias tablas normalizadas suelen corresponder a una sola clase y las relaciones entre las clases se representan de forma diferente a las relaciones entre tablas. Por ejemplo, para representar el cliente de un pedido de ventas, una clase Order utiliza una propiedad que contiene una referencia a una instancia de una clase Customer, pero 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, pero la tabla Customer en una base de datos no tiene ninguna columna comparable.

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. Las clases que se generan para un modelo conceptual determinado derivan de las clases base que proporcionan Servicios de objeto para materializar las entidades como objetos y para realizar un seguimiento de los cambios y guardarlos. Los programadores pueden utilizar estas clases para trabajar con las entidades y relaciones como objetos relacionados mediante propiedades de navegación. Para obtener más información sobre Servicios de objeto, vea Información general de Servicios de objeto (Entity Framework).

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. Servicios de objeto usa el EDM 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 los objetos que Servicios de objeto administra. Entity Framework proporciona las maneras siguientes de consultar un EDM 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, vea Información general de LINQ to Entities.

  • Entity SQL: dialecto independiente del almacenamiento de SQL que funciona directamente con las entidades del modelo conceptual y que admite características del EDM como la herencia y las relaciones. Entity SQL se utiliza con las consultas de objeto y con las consultas que se ejecutan con el proveedor de EntityClient. Para obtener más información, vea Información general de Entity SQL.

  • Métodos del generador de consultas: permite construir consultas de Entity SQL utilizando los métodos de consulta del estilo de LINQ. Para obtener más información, vea Métodos del generador de consultas (Entity Framework).

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 Servicios de objeto 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 las consultas de Entity SQL y usar el lector de datos de solo lectura devuelto. Para obtener más información, vea Proveedor de EntityClient para Entity Framework.

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

El Entity Framework genera una clase derivada de ObjectContext 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. Para obtener más información, vea Agregar, modificar y eliminar objetos (Entity Framework).

Herramientas de Entity Data Model

Junto con el motor de tiempo de ejecución de Entity Framework, .NET Framework 3.5 SP1 incluye el generador de EDM (EdmGen.exe). Esta utilidad de símbolo del sistema se conecta a un origen de datos y genera un EDM basado en una asignación unívoca entre las entidades y las tablas. También usa un archivo de modelo conceptual (.csdl) para generar un archivo de nivel de objeto que contiene clases que representan tipos de entidad y ObjectContext. Para obtener más información, vea Generador de EDM (EdmGen.exe).

Visual Studio 2008 incluye una variada compatibilidad con las herramientas que permiten generar y mantener un EDM en una aplicación de Visual Studio. El Entity Data Model Designer permite crear escenarios de asignación avanzados, por ejemplo de la herencia de tabla por tipo y de tabla por jerarquía, y entidades de división que se asignan a varias tablas. Para obtener más información, vea Información general sobre ADO.NET Entity Data Model Designer.

Obtener más información

En los temas siguientes se puede obtener más información sobre Entity Framework:

  • Tutorial rápido (Entity Framework)
    Muestra cómo utilizar las herramientas de Entity Data Model con Visual Studio 2008 para crear su primera aplicación de Entity Framework rápidamente.
  • Escenarios de la aplicación (Entity Framework)
    Proporciona vínculos basados en tareas a temas que corresponden con escenarios de aplicación concretos, como escribir las consultas, enlazar los objetos a los controles de datos o implementar la lógica comercial.
  • Terminología de Entity Framework
    Define muchas de las condiciones que incluye el EDM y el Entity Framework, y que se utilizan en documentación de Entity Framework.
  • Recursos de Entity Framework
    Proporciona vínculos a temas conceptuales y vínculos a temas externos y recursos para generar aplicaciones de Entity Framework.

Vea también

Otros recursos

ADO.NET Entity Framework