Información general de 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. Con Entity Framework , los desarrolladores de software pueden trabajar en un nivel más alto de abstracción cuando tratan con datos, y puede 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 :

  • Giving Life to Models

  • Mapping Objects to Data

  • Accessing and Changing Entity Data

  • Data Providers

  • Entity Data Model Tools

  • Learning More

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. 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, vea 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 clase Customer, 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. Para obtener más información, vea Definir y administrar relaciones (Entity Framework).

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 (Entity Framework) y How to: Customize Object-Layer Code Generation.

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, vea 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, vea Información general de Entity SQL.

  • Métodos del generador de consultas Estos métodos permiten construir consultas de Entity SQL utilizando 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 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, vea Proveedor de EntityClient para Entity Framework.

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

Diagrama de arquitectura de Entity Framework

Las herramientas de Entity Data Model pueden generar 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 Crear, agregar, modificar y eliminar objetos (Entity Framework).

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, vea 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, vea Proveedor de datos .NET Framework para SQL Server (SqlClient) para Entity Framework.

Herramientas de Entity Data Model

Junto con el motor de ejecución de Entity Framework , .NET Framework versión 4 incluye el Generador de EDM (EdmGen.exe). Esta utilidad de línea de comandos se conecta a un origen de datos y genera archivos del modelo y de asignación basados 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 2010 incluye una variada compatibilidad con las herramientas que permiten generar y mantener archivos de modelo y de asignación 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 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 :

  • Terminología de Entity Framework
    Define muchos de los términos incluidos en Entity Data Model y Entity Framework que se utilizan en la documentación de Entity Framework .
  • Recursos de Entity Framework
    Proporciona vínculos a temas conceptuales y vínculos a temas externos y recursos para compilar aplicaciones de Entity Framework .

Vea también

Conceptos

ADO.NET Entity Framework