tipo complexo
A 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 dentro do 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 que um tipo complexo pode levar uma carga útil de dados na forma das propriedades do tipo primitivo ou outros tipos complexos. No entanto, há algumas diferenças entre tipos complexos e tipos de entidade:
Os tipos complexos não têm identidades e portanto não podem existir independente. Os tipos complexos podem existir somente como propriedades em tipos de entidade ou em outros tipos complexos.
Os tipos complexos não podem participar em 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 Entity Framework do ADO.NET usa uma DSL (linguagem específica de domínio) chamada CSDL (linguagem de definição de esquema conceitual) para definir modelos conceituais. CSDL seguir define um tipo complexo, endereço, com as propriedades StreetAddress
, City
, StateOrProvince
, Country
, e PostalCode
de tipo primitivo.
<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 complexo Address
(acima) como uma propriedade em um tipo de entidade, você deve declarar a propriedade na definição de tipo de entidade. CSDL seguir declara a propriedade de Address
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>