Partilhar via


tipo complexo

Um tipo complexo é um modelo para definir propriedades ricas e estruturadas em tipos de entidade ou em outros tipos complexos. Cada modelo contém o seguinte:

  • Um nome único. (Obrigatório)

    Nota

    O nome de um tipo complexo não pode ser o mesmo que um nome de tipo de entidade dentro do mesmo namespace.

  • Dados na forma de uma ou mais propriedades. (Opcional.)

    Nota

    Uma propriedade de um tipo complexo pode ser outro tipo complexo.

Um tipo complexo é semelhante a um tipo de entidade em que um tipo complexo pode transportar uma carga útil de dados na forma de propriedades de tipo primitivo ou outros tipos complexos. No entanto, existem algumas diferenças importantes entre tipos complexos e tipos de entidade:

  • Tipos complexos não têm identidades e, portanto, não podem existir independentemente. Tipos complexos só podem existir como propriedades em tipos de entidade ou outros tipos complexos.

  • Tipos complexos não podem participar de associações. Nenhuma extremidade de uma associação pode ser um tipo complexo e, portanto , as propriedades de navegação não podem ser definidas em tipos complexos.

Exemplo

O ADO.NET Entity Framework usa uma linguagem específica de domínio (DSL) chamada linguagem de definição de esquema conceitual (CSDL) para definir modelos conceituais. A CSDL a seguir define um tipo complexo, Endereço, com as propriedades StreetAddressde tipo primitivo , City, StateOrProvince, Country, e 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 o tipo Address complexo (acima) como uma propriedade em um tipo de entidade, você deve declarar o tipo de propriedade na definição de tipo de entidade. A seguinte CSDL declara a Address propriedade como um tipo complexo em um tipo de entidade (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 também