Compartir a través de


tipo complejo

Un tipo complejo es una plantilla para definir propiedades enriquecidas y estructuradas en tipos de entidad o en otros tipos complejos. Cada plantilla contiene lo siguiente:

  • Un nombre único. (Requerido)

    Nota:

    El nombre de un tipo complejo no puede ser el mismo que un nombre de tipo de entidad dentro del mismo espacio de nombres.

  • Datos en forma de una o varias propiedades. (Opcional).

    Nota:

    Una propiedad de un tipo complejo puede ser otro tipo complejo.

Un tipo complejo es similar a un tipo de entidad en el que un tipo complejo puede llevar una carga de datos en forma de propiedades de tipo primitivo u otros tipos complejos. Sin embargo, hay algunas diferencias clave entre tipos complejos y tipos de entidad:

  • Los tipos complejos no tienen identidades y, por tanto, no pueden existir de forma independiente. Los tipos complejos solo pueden existir como propiedades en tipos de entidad u otros tipos complejos.

  • Los tipos complejos no pueden participar en asociaciones. Ninguno de los extremos de una asociación puede ser un tipo complejo y, por tanto, las propiedades de navegación no se pueden definir en tipos complejos.

Ejemplo

El ADO.NET Entity Framework usa un lenguaje específico del dominio (DSL) denominado lenguaje de definición de esquema conceptual (CSDL) para definir modelos conceptuales. El siguiente CSDL define un tipo complejo, Address, con las propiedades StreetAddressde tipo primitivo , City, StateOrProvince, Countryy PostalCode.

<ComplexType Name="Address" >
  <Property Type="String" Name="StreetAddress" Nullable="false" />
  <Property Type="String" Name="City" Nullable="false" />
  <Property Type="String" Name="StateOrProvince" Nullable="false" />
  <Property Type="String" Name="Country" Nullable="false" />
  <Property Type="String" Name="PostalCode" Nullable="false" />
</ComplexType>

Para definir el tipo Address complejo (anterior) como una propiedad en un tipo de entidad, debe declarar el tipo de propiedad en la definición del tipo de entidad. El siguiente CSDL declara la Address propiedad como un tipo complejo en un tipo de entidad (Publisher):

<EntityType Name="Publisher">
      <Key>
        <PropertyRef Name="Id" />
      </Key>
      <Property Type="Int32" Name="Id" Nullable="false" />
      <Property Type="String" Name="Name" Nullable="false" />
      <Property Type="BooksModel.Address" Name="Address" Nullable="false" />
      <NavigationProperty Name="Books" Relationship="BooksModel.PublishedBy"
                          FromRole="Publisher" ToRole="Book" />
    </EntityType>

Consulte también