共用方式為


複雜類型 (實體資料模型)

複雜類型」(Complex Type) 是在實體類型或其他複雜類型定義豐富結構化屬性的範本。 每個範本包含下列資訊:

  • 唯一名稱。 (必要項)

    Ee382831.note(zh-tw,VS.100).gif注意:
    複雜類型的名稱不可以與同一個命名空間中的實體類型名稱相同。

  • 一個或多個屬性形式的資料。 (選擇性)

    Ee382831.note(zh-tw,VS.100).gif注意:
    複雜類型的屬性可以是另一個複雜類型。

複雜類型與實體類型相似之處在於,複雜類型可以包含基本型別屬性或其他複雜類型形式的資料承載。 不過,複雜類型和實體類型之間還是有些重大的差異:

  • 複雜類型不具有識別,因此無法獨立存在。 複雜類型只能以實體類型或其他複雜類型的屬性形式存在。

  • 複雜類型不可參與關聯。 關聯的兩個 End 皆不可為複雜類型,因此不可在複雜類型定義導覽屬性

範例

ADO.NET Entity Framework 會使用稱為概念結構定義語言 (CSDL) 的特定定義域語言 (DSL) 來定義概念模型。 下列 CSDL 以基底類型屬性 StreetAddressCityStateOrProvinceCountryPostalCode 定義複雜類型 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>

另請參閱

概念

實體資料模型索引鍵概念
實體資料模型