complex type
Karmaşık tür, varlık türlerinde veya diğer karmaşık türlerde zengin, yapılandırılmış özellikler tanımlamaya yönelik bir şablondur. Her şablon aşağıdakileri içerir:
Benzersiz bir ad. (Gerekli)
Not
Karmaşık bir türün adı, aynı ad alanındaki varlık türü adıyla aynı olamaz.
Bir veya daha fazla özellik biçimindeki veriler. (İsteğe bağlı.)
Not
Karmaşık türün özelliği başka bir karmaşık tür olabilir.
Karmaşık tür, karmaşık bir türün ilkel tür özellikleri veya diğer karmaşık türler biçiminde veri yükü taşıyabildiği varlık türüne benzer. Ancak karmaşık türler ile varlık türleri arasında bazı önemli farklar vardır:
Karmaşık türlerin kimlikleri yoktur ve bu nedenle bağımsız olarak mevcut olamaz. Karmaşık türler yalnızca varlık türlerinde veya diğer karmaşık türlerde özellik olarak bulunabilir.
Karmaşık türler ilişkilendirmelere katılamaz. İlişkilendirmenin hiçbir ucu karmaşık bir tür olamaz ve bu nedenle gezinti özellikleri karmaşık türlerde tanımlanamaz.
Örnek
ADO.NET Entity Framework, kavramsal modelleri tanımlamak için kavramsal şema tanım dili (CSDL) olarak adlandırılan etki alanına özgü bir dil (DSL) kullanır. Aşağıdaki CSDL, ilkel tür özellikleri StreetAddress
, , Country
City
StateOrProvince
, ve PostalCode
ile karmaşık bir tür olan Address'i tanımlar.
<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>
Karmaşık türü Address
(yukarıdaki) bir varlık türünde özellik olarak tanımlamak için, varlık türü tanımında özellik türünü bildirmeniz gerekir. Aşağıdaki CSDL, özelliği bir varlık türünde (Publisher) karmaşık bir tür olarak bildirir Address
:
<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>