共用方式為


複雜類型

複雜類型是用來定義實體類型或其他複雜類型之豐富結構化屬性的範本。 每個範本都包含以下項目:

  • 唯一名稱。 (必要項)

    備註

    複雜類型的名稱不能與相同命名空間中的實體類型名稱相同。

  • 數據格式為一或多個 屬性。 (選擇性。)

    備註

    複雜類型的屬性可以是另一個複雜類型。

複雜類型與實體類型類似,因為複雜類型可以以基本類型屬性或其他複雜類型的形式攜帶數據承載。 不過,複雜類型和實體類型之間有一些主要差異:

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

  • 複雜類型無法參與 關聯。 關聯兩端都不能是複雜類型,因此無法在複雜型別上定義 導覽屬性

範例

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

另請參閱