複雜類型是用來定義實體類型或其他複雜類型之豐富結構化屬性的範本。 每個範本都包含以下項目:
唯一名稱。 (必要項)
備註
複雜類型的名稱不能與相同命名空間中的實體類型名稱相同。
數據格式為一或多個 屬性。 (選擇性。)
備註
複雜類型的屬性可以是另一個複雜類型。
複雜類型與實體類型類似,因為複雜類型可以以基本類型屬性或其他複雜類型的形式攜帶數據承載。 不過,複雜類型和實體類型之間有一些主要差異:
範例
ADO.NET Entity Framework 會使用稱為概念架構定義語言 (CSDL) 的網域特定語言 (DSL) 來定義概念模型。 下列 CSDL 會使用基本類型屬性 StreetAddress、、 City、 StateOrProvince、 Country和 PostalCode來定義複雜類型 Address。
<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>
若要將複雜類型 Address (上) 定義為實體類型上的屬性,您必須在實體類型定義中宣告屬性類型。 下列 CSDL 會將 Address 屬性宣告為實體類型上的複雜類型(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>