Compartilhar 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 exclusivo. (Obrigatória)

    Observação

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

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

    Observação

    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 de dados na forma de propriedades de tipo primitivo ou outros tipos complexos. No entanto, há 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 das extremidades 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 DSL (linguagem específica do domínio) chamada CSDL (linguagem de definição de esquema conceitual) para definir modelos conceituais. O CSDL a seguir define um tipo complexo, Address, com as propriedades StreetAddressde tipo primitivo, City, StateOrProvincee CountryPostalCode.

<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. O CSDL a seguir declara a propriedade Address como um tipo complexo em um tipo de entidade (Editora):

<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