ComplexType (Elemento) (CSDL)

Un elemento ComplexType define una estructura de datos compuesta por propiedades EdmSimpleType u otros tipos complejos. Para obtener más información acerca de EdmSimpleType, vea Tipos de modelos conceptuales. Un tipo complejo puede ser una propiedad de un tipo de entidad o de otro tipo complejo. Un tipo complejo se parece a un tipo de entidad en que también define datos. Sin embargo, existen algunas diferencias clave entre los tipos complejos y los tipos de entidad:

  • Los tipos complejos no tienen identidades (o claves) y, por consiguiente, no pueden existir de forma independiente. Los tipos complejos solo pueden existir como propiedades de tipos de entidad u otros tipos complejos.

  • Los tipos complejos no pueden participar en asociaciones. Los extremos de una asociación no pueden ser tipos complejos y, por consiguiente, no se pueden definir propiedades de navegación para tipos complejos.

  • Una propiedad de tipo complejo no puede tener un valor nulo, aunque las propiedades escalares de un tipo complejo se pueden establecer cada una con el valor nulo.

Un elemento ComplexType puede tener los elementos secundarios siguientes (en el orden mostrado):

En la tabla siguiente se explican los atributos que se pueden aplicar al elemento ComplexType.

Nombre de atributo Es necesario Valor

Name

El nombre del tipo complejo. El nombre de un tipo complejo no puede ser igual que el nombre de otro tipo complejo, tipo de entidad o asociación que esté dentro del ámbito del modelo.

BaseType

No

El nombre de otro tipo complejo que es el tipo base del tipo complejo que se define.

Cc716799.note(es-es,VS.100).gifNota:
Este atributo no es aplicable en la versión de CSDL especificada por el espacio de nombres https://schemas.microsoft.com/ado/2006/04/edm.La herencia de los tipos complejos no se admite en esa versión.

Abstract

No

True o False (el valor predeterminado), dependiendo de si el tipo complejo es un tipo abstracto.

Cc716799.note(es-es,VS.100).gifNota:
Este atributo no es aplicable en la versión de CSDL especificada por el espacio de nombres https://schemas.microsoft.com/ado/2006/04/edm.Los tipos complejos de esa versión no pueden ser tipos abstractos.

Cc716799.note(es-es,VS.100).gifNota:
Se puede aplicar cualquier número de atributos de anotación (atributos XML personalizados) al elemento ComplexType.Sin embargo, es posible que los atributos personalizados no pertenezcan a ningún espacio de nombres XML reservado para CSDL.Dos atributos personalizados cualesquiera no pueden tener nombres completos idénticos.

Ejemplo

En el ejemplo de código siguiente se muestra un tipo complejo Address, con las propiedades EdmSimpleType StreetAddress, City, StateOrProvince, Country y 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 complejo Address (anterior) como una propiedad de un tipo de entidad, debe declarar el tipo de propiedad en la definición del tipo de entidad. En el ejemplo siguiente se muestra la propiedad Address 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>

Vea también

Conceptos

Información general de Entity Framework
Especificación CSDL
Schema (Elemento) (CSDL)
EntityType (Elemento) (CSDL)
Objetos de tipo complejo (Entity Framework)

Otros recursos

Especificaciones CSDL, SSDL y MSL
ADO.NET Entity Data Model Tools
complex type (Entity Data Model)