複雜類型 (實體資料模型)
「複雜類型」(Complex Type) 是在實體類型或其他複雜類型定義豐富結構化屬性的範本。 每個範本包含下列資訊:
唯一名稱。 (必要項)
注意: 複雜類型的名稱不可以與同一個命名空間中的實體類型名稱相同。 一個或多個屬性形式的資料。 (選擇性)
注意: 複雜類型的屬性可以是另一個複雜類型。
複雜類型與實體類型相似之處在於,複雜類型可以包含基本型別屬性或其他複雜類型形式的資料承載。 不過,複雜類型和實體類型之間還是有些重大的差異:
範例
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 會在實體類型 (Publisher) 上將 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>