複合型は、エンティティ型またはその他の複合型に対して豊富な構造化プロパティを定義するためのテンプレートです。 各テンプレートには、次のものが含まれています。
ユニークな名前。 (必須)
注
複合型の名前は、同じ名前空間内のエンティティ型名と同じにすることはできません。
1 つ以上の プロパティの形式のデータ。 (省略可能)。)
注
複合型のプロパティは、別の複合型にすることができます。
複合型は、複合型がプリミティブ型プロパティまたはその他の複合型の形式でデータ ペイロードを運ぶことができるという点で、エンティティ型に似ています。 ただし、複合型とエンティティ型にはいくつかの主な違いがあります。
複合型には ID がないため、独立して存在することはできません。 複合型は、エンティティ型またはその他の複合型のプロパティとしてのみ存在できます。
複合型は 関連付けに参加できません。 関連付けのどちらの末尾も複合型にすることはできません。そのため、 ナビゲーション プロパティ を複合型で定義することはできません。
例
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>