complex type
Komplexní typ je šablona pro definování bohatých, strukturovaných vlastností u typů entit nebo jiných komplexních typů. Každá šablona obsahuje následující:
Jedinečný název. (Povinné)
Poznámka:
Název komplexního typu nemůže být stejný jako název typu entity v rámci stejného oboru názvů.
Data ve formě jedné nebo více vlastností. (Volitelné.)
Poznámka:
Vlastnost komplexního typu může být jiný komplexní typ.
Komplexní typ je podobný typu entity v tom, že komplexní typ může přenášet datovou část ve formě primitivních vlastností typu nebo jiných komplexních typů. Mezi komplexními typy a typy entit však existují některé klíčové rozdíly:
Komplexní typy nemají identity, a proto nemohou existovat nezávisle. Komplexní typy mohou existovat pouze jako vlastnosti u typů entit nebo jiných komplexních typů.
Komplexní typy se nemohou účastnit přidružení. Ani jeden konec přidružení nemůže být složitý typ, a proto nelze definovat navigační vlastnosti u komplexních typů.
Příklad
ADO.NET Entity Framework používá jazyk specifický pro doménu (DSL) označovaný jako jazyk CSDL (Conceptual Schema Definition Language) k definování konceptuálních modelů. Následující CSDL definuje komplexní typ, Address, s primitivními vlastnostmi StreetAddress
typu , City
, StateOrProvince
, Country
, a 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>
Chcete-li definovat komplexní typ Address
(výše) jako vlastnost typu entity, musíte deklarovat typ vlastnosti v definici typu entity. Následující csDL deklaruje Address
vlastnost jako komplexní typ u typu entity (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>