Conjuntos de entidades (EDM)

En el Entity Data Model (EDM), un EntitySet es un contenedor lógico de las entidades de un único tipo. De igual forma, un AssociationSet es un contenedor de asociaciones del mismo tipo. Los conjuntos de entidades y asociaciones definidos en esquemas se asignan a las tablas de la base de datos que almacena los datos de las aplicaciones. Los conjuntos de entidades y asociaciones son el fundamento de las clases del modelo de objetos de programación que se usará en el código de una aplicación.

Los conjuntos de entidades y los conjuntos de asociaciones definen el ámbito de las entidades y de las asociaciones; los contenedores de entidades definen los contenedores del almacenamiento que contienen las entidades y las asociaciones. No hay ningún conjunto de SimpleType. Las instancias de estos tipos se crean como valores que se asignan a las propiedades de una entidad.

Un EntitySet de un EntityType contiene las instancias del EntityType o cualquiera de sus subtipos. Se puede definir más de un EntitySet con el mismo EntityType. Una instancia de un EntityType solo puede ser miembro de un EntitySet.

Las instancias de entidad de un EntitySet deben satisfacer tres condiciones:

  • El tipo de la instancia de entidad es el EntityType del EntitySet o cualquier subtipo del EntityType.

  • El valor de Key de cada instancia de entidad lo identifica de forma única en el EntitySet.

  • La instancia de entidad no es miembro de ningún otro EntitySet.

La siguiente sintaxis del lenguaje de definición de esquemas conceptuales (CSDL) es la declaración de un EntitySet denominado CustomerSet. El EntitySet contiene instancias de la entidad CustomerType:

<EntitySet Name="CustomerSet" EntityType="CustomerType"/>

En el segmento de esquema siguiente, dos declaraciones de EntityType definen los tipos de entidad Product y Supplier. Los conjuntos de entidades basados en las entidades Product y Supplier se denominan apropiadamente en las formas plurales: Products y Suppliers. Estos conjuntos de entidades se agregan a la definición de un EntityContainer.

<?xml version="1.0" encoding="utf-8"?>
<Schema xmlns:cg="https://schemas.microsoft.com/ado/2006/04/codegeneration"
    xmlns:edm="https://schemas.microsoft.com/ado/2006/04/edm"
    xmlns="https://schemas.microsoft.com/ado/2006/04/edm"
    Namespace="MyCompany.LOBSchema" Alias="Self">

<EntityType Name="Product">
    <Key>
      <PropertyRef Name="ProductID" />
    </Key>
    <Property Name="ProductID" Type="Int32" Nullable="false" />
    <Property Name="ProductName" Type="String" Nullable="false" />
    <Property Name="UnitPrice" Type="Decimal" Nullable="true" />
    <Property Name="UnitsInStock" Type="Int16" Nullable="true" />
</EntityType>

<EntityType Name="Supplier">
    <Key>
      <PropertyRef Name="SupplierID" />
    </Key>
    <Property Name="SupplierID" Type="Int32" Nullable="false" />
    <Property Name="CompanyName" Type="String" Nullable="false" />
    <Property Name="ContactName" Type="String" Nullable="true" />
    <Property Name="HomePage" Type="String" Nullable="true" />
</EntityType>

<EntityContainer Name="LOB-Data">
    <EntitySet Name="Products" EntityType="Product" />
    <EntitySet Name="Suppliers" EntityType="Supplier" />
</EntityContainer>

</Schema>

Para obtener más información acerca de los contenedores de entidades, vea Contenedores de entidades (EDM).

Múltiples conjuntos de entidades por tipo

El Entity Data Model (EDM) permite que se definan para el mismo tipo de entidad varios conjuntos de entidades dentro del contenedor de una sola entidad o de varios contenedores de entidades. La definición de múltiples conjuntos de entidades por tipo (MEST, Multiple Entity Sets Per Type) permite a los usuarios mejorar su código cuando las bases de datos tienen particiones o en otros escenarios en los que varias tablas tienen la misma estructura.

Las bases de datos se dividen en particiones por diversos motivos, como son el rendimiento, la disponibilidad o la facilidad de uso. Una institución financiera que administra cuentas de un gran número de clientes podría dividir en particiones sus sistemas de bases de datos para mejorar el rendimiento en una distribución regional de datos de clientes. La búsqueda y actualización de los datos se agilizarán al restringirse a un subconjunto regional de los datos. Para implementar MEST, las particiones deben crearse dentro de la misma base de datos. Si las particiones tienen lugar a través de diferentes bases de datos, en lugar de un escenario MEST se requerirán cadenas de conexión y contextos diferentes.

Otro escenario en el que la creación de particiones podría ser de utilidad es cuando un departamento de IT desea realizar cada noche copias de seguridad de los datos a los que se tiene acceso con frecuencia, mientras que los datos a los no se tiene acceso desde hace más de un año se archivan. Los administradores de base de datos podrían archivar los clientes que no hayan usado los datos de su cuenta durante más de un año en una tabla de archivo de la misma base de datos que tenga el mismo esquema de tablas.

Es importante considerar la estructura de las asociaciones entre los tipos de entidad que sean miembro de más de un conjunto de entidades. MEST se implementa con más facilidad de acuerdo con la estructura que se ha probado. Los escenarios siguientes se han utilizado con éxito.

  • En una asociación uno a varios, una entidad implementada como MEST en el extremo "uno" de una asociación debería tener una relación con dos conjuntos de entidades diferentes en el extremo "varios". Por ejemplo, el escenario siguiente puede implementarse con el tipo de entidad Customer en dos conjuntos de entidades: PreferedCustomers y CreditRiskCustomers.

    • PreferedCustomers <1-----*> Orders

    • CreditRiskCustomers <1-----*> CreditReports

  • En una asociación uno a varios, un conjunto de entidades en el extremo "uno" puede tener una asociación con una entidad implementada como MEST en el extremo "varios". Por ejemplo, la entidad Product se puede incluir en dos conjuntos de entidades y en asociaciones con la entidad ManufacturingUnit.

    • ManufacturingUnit <1-----*> Products

    • ManufacturingUnit <1----*> DefectiveProducts

La implementación de MEST en un escenario "uno a uno" o "varios a varios" se dificultará al diseñar el modelo lógico o al asignarlo al modelo conceptual. El problema de implementar MEST en un escenario uno a uno y varios a varios es el mismo que supone tener MEST en el extremo "uno" con una relación con el mismo conjunto de entidades en el extremo "varios". En el caso de uno a uno, es posible crear un modelo lógico similar a los casos para uno a varios.

  • En el siguiente escenario de pedidos, se producirán problemas al diseñar el modelo lógico.

    • PreferedCustomers <1-----*> Orders

    • CreditRiskCustomers <1-----*> Orders

Para obtener más información, vea Cómo definir un modelo con múltiples conjuntos de entidades por tipo (Entity Framework).

Vea también

Conceptos

Asociación (EDM)
Conjuntos de asociaciones (EDM)
Contenedores de entidades (EDM)
Tipos del Entity Data Model
Tipos simples (EDM)

Otros recursos

Especificación de asignaciones y esquemas (Entity Framework)