conjunto de entidades (Entity Data Model)
Un conjunto de entidades es un contenedor lógico para las instancias de un tipo de entidad y las instancias de cualquier tipo que se deriven de ese tipo de entidad. (Para obtener información acerca de los tipos derivados, vea Entity Data Model: Herencia). La relación entre un tipo de entidad y un conjunto de entidades es análoga a la relación entre una fila y una tabla en una base de datos relacional: al igual que una fila, un tipo de entidad describe la estructura de los datos y, al igual que una tabla, un conjunto de entidades contiene instancias de una determinada estructura. Un conjunto de entidades no es una construcción de modelado de datos, ya que no describe la estructura de los datos. En su lugar, un conjunto de entidades proporciona una construcción para que un entorno de hospedaje o de almacenamiento (como Common Language Runtime o una base de datos de SQL Server) agrupe las instancias del tipo de entidad y se puedan asignar a un almacén de datos.
Un conjunto de entidades se define dentro de un contenedor de entidades, que es una agrupación lógica de conjuntos de entidades y conjuntos de asociaciones.
Para que una instancia de tipo de entidad exista en un conjunto de entidades, deben cumplirse las condiciones siguientes:
El tipo de la instancia puede ser el mismo que el tipo de entidad en el que se basa el conjunto de entidades, o un subtipo del tipo de entidad.
La clave de entidad para la instancia es única dentro del conjunto de entidades.
La instancia no existe en ningún otro conjunto de entidades.
Nota: Se pueden definir varios conjuntos de entidades usando el mismo tipo de entidad, pero una instancia de un tipo de entidad determinado solo puede existir en un conjunto de entidades.
No es necesario definir un conjunto de entidades para cada tipo de entidad de un modelo conceptual.
Ejemplo
El diagrama siguiente muestra un modelo conceptual con tres tipos de entidad: Book, Publisher y Author.
El diagrama siguiente muestra dos conjuntos de entidades (Books y Publishers) y un conjunto de asociaciones (PublishedBy) basados en el modelo conceptual mostrado anteriormente. En el conjunto de entidades Books, Bi representa una instancia del tipo de entidad Book en tiempo de ejecución. De igual forma, Pj representa una instancia de Publisher en el conjunto de entidades Publishers. BiPj representa una instancia de la asociación PublishedBy en el conjunto de asociaciones PublishedBy.
ADO.NET Entity Framework usa un lenguaje específico de dominio (DSL) denominado lenguaje de definición de esquemas conceptuales (CSDL) para definir los modelos conceptuales. El código CSDL siguiente define un contenedor de entidades con un conjunto de entidades para cada tipo de entidad del modelo conceptual mostrado anteriormente. Tenga en cuenta que el nombre y el tipo de entidad de cada conjunto de entidades se definen mediante atributos XML.
<EntityContainer Name="BooksContainer" >
<EntitySet Name="Books" EntityType="BooksModel.Book" />
<EntitySet Name="Publishers" EntityType="BooksModel.Publisher" />
<EntitySet Name="Authors" EntityType="BooksModel.Author" />
<AssociationSet Name="PublishedBy" Association="BooksModel.PublishedBy">
<End Role="Book" EntitySet="Books" />
<End Role="Publisher" EntitySet="Publishers" />
</AssociationSet>
<AssociationSet Name="WrittenBy" Association="BooksModel.WrittenBy">
<End Role="Book" EntitySet="Books" />
<End Role="Author" EntitySet="Authors" />
</AssociationSet>
</EntityContainer>
Es posible definir varios conjuntos de entidades por tipo (MEST). El código CSDL siguiente define un contenedor de entidades con dos conjuntos de entidades para el tipo de entidad Book:
<EntityContainer Name="BooksContainer" >
<EntitySet Name="Books" EntityType="BooksModel.Book" />
<EntitySet Name="FictionBooks" EntityType="BooksModel.Book" />
<EntitySet Name="Publishers" EntityType="BooksModel.Publisher" />
<EntitySet Name="Authors" EntityType="BooksModel.Author" />
<AssociationSet Name="PublishedBy" Association="BooksModel.PublishedBy">
<End Role="Book" EntitySet="Books" />
<End Role="Publisher" EntitySet="Publishers" />
</AssociationSet>
<AssociationSet Name="BookAuthor" Association="BooksModel.BookAuthor">
<End Role="Book" EntitySet="Books" />
<End Role="Author" EntitySet="Authors" />
</AssociationSet>
</EntityContainer>