複合型

"複合型" は、エンティティ型またはその他の複合型に、構造化された豊富なプロパティを定義するためのテンプレートです。 各テンプレートには、以下が含まれています。

  • 一意の名前 (必須)

    Note

    複合型の名前は、同じ名前空間のエンティティ型の名前と同じにすることはできません。

  • 1 つ以上のプロパティの形式のデータ。 (省略可能)

    Note

    複合型のプロパティには、別の複合型を使用することができます。

複合型は、プリミティブ型のプロパティまたはその他の複合型の形式でデータ ペイロードを伝達できる点がエンティティ型と似ています。 ただし、複合型とエンティティ型の間にはいくつかの重要な違いがあります。

  • 複合型には ID がないため、独立して存在することができません。 複合型は、エンティティ型またはその他の複合型のプロパティとしてのみ存在できます。

  • 複合型は、アソシエーションに参加できません。 アソシエーションのいずれの End にも複合型を指定できないため、複合型にはナビゲーション プロパティを定義できません。

ADO.NET Entity Framework では、概念スキーマ定義言語 (CSDL) と呼ばれるドメイン固有言語 (DSL) を使用して概念モデルを定義します。 次の CSDL は、StreetAddressCityStateOrProvinceCountry、および 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>

関連項目