ComplexType 要素 (CSDL)
ComplexType 要素は、EdmSimpleType プロパティまたは他の複合型で構成されるデータ構造を定義します。EdmSimpleType の詳細については、「概念モデルの型 (CSDL)」を参照してください。複合型は、エンティティ型または別の複合型のプロパティにすることができます。複合型は、データを定義するという点でエンティティ型に似ています。ただし、複合型とエンティティ型の間にはいくつかの重要な違いがあります。
複合型には ID (またはキー) がないため、独立して存在することができません。複合型は、エンティティ型またはその他の複合型のプロパティとしてのみ存在できます。
複合型は、アソシエーションに参加できません。アソシエーションのいずれの End にも複合型を指定できないため、複合型にはナビゲーション プロパティを定義できません。
複合型のスカラー プロパティはそれぞれ null に設定できますが、複合型のプロパティには null 値を指定できません。
ComplexType 要素には、次の子要素をここに示す順序で含めることができます。
Documentation (0 個または 1 個の要素)
Property (0 個以上の要素)
Annotation 要素 (0 個以上の要素)
次の表は、ComplexType 要素に適用できる属性を示しています。
属性名 |
必須 |
値 |
---|---|---|
Name |
はい |
複合型の名前。複合型の名前は、モデルのスコープ内にある別の複合型、エンティティ型、またはアソシエーションの名前と同じにすることはできません。 |
BaseType |
いいえ |
定義される複合型の基本データ型である、別の複合型の名前。
注
この属性は、名前空間 https://schemas.microsoft.com/ado/2006/04/edm で指定された CSDL バージョンでは適用されません。複合型の継承は、このバージョンではサポートされません。
|
Abstract |
いいえ |
複合型が抽象型かどうかにより、True または False (既定値)。
注
この属性は、名前空間 https://schemas.microsoft.com/ado/2006/04/edm で指定された CSDL バージョンでは適用されません。このバージョンの複合型を抽象型にすることはできません。
|
注意
ComplexType 要素には、任意の数の annotation 属性 (カスタム XML 属性) を適用できます。ただし、カスタム属性は CSDL 用に予約されたどの XML 名前空間にも属さない場合があります。カスタム属性の完全修飾名は一意である必要があります。
例
次の例は、EdmSimpleType プロパティ 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 (上記) を定義するには、エンティティ型の定義でプロパティの型を宣言する必要があります。次の例は、エンティティ型 (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>