NavigationProperty 要素 (CSDL)
NavigationProperty 要素は、ナビゲーション プロパティを定義します。このプロパティは、アソシエーションの他方の End を参照できるようにします。Property 要素で定義されるプロパティとは異なり、ナビゲーション プロパティはデータの形と特性を定義しません。ナビゲーション プロパティは、アソシエーション内で 2 つのエンティティ型間を移動するための手段を提供します。
ナビゲーション プロパティは、アソシエーション End の両方のエンティティ型で省略可能です。1 つのアソシエーション End のエンティティ型にナビゲーション プロパティを定義した場合に、そのアソシエーションの他方の End でもエンティティ型にナビゲーション プロパティを定義する必要はありません。
ナビゲーション プロパティによって返されるデータ型は、リモートのアソシエーション End の多重度により決まります。たとえば、ナビゲーション プロパティ OrdersNavProp が Customer エンティティ型に存在し、Customer と Order の間の一対多のアソシエーションで移動するとします。ナビゲーション プロパティのリモートのアソシエーション End の多重度が多数 (*) であるため、そのデータ型はコレクション (Order の) になります。同様に、Order エンティティ型にナビゲーション プロパティ CustomerNavProp が存在する場合、リモート End の多重度が (1) であるため、データ型は Customer になります。
NavigationProperty 要素には、次の子要素をここに示す順序で含めることができます。
Documentation (0 個または 1 個の要素)
Annotation 要素 (0 個以上の要素)
適用可能な属性
NavigationProperty 要素に適用できる属性を次の表に示します。
属性名 |
必須 |
値 |
---|---|---|
Name |
はい |
ナビゲーション プロパティの名前。 |
Relationship |
はい |
モデルのスコープ内にあるアソシエーションの名前。 |
ToRole |
有効 |
ナビゲーションが終了する側のアソシエーション End。ToRole 属性の値は、いずれかのアソシエーション End で定義されているいずれかの Role 属性の値 (AssociationEnd 要素で定義) と同じである必要があります。 |
FromRole |
有効 |
ナビゲーションが始まる側のアソシエーション End。FromRole 属性の値は、いずれかのアソシエーション End で定義されているいずれかの Role 属性の値 (AssociationEnd 要素で定義) と同じである必要があります。 |
注意
NavigationProperty 要素には、任意の数の annotation 属性 (カスタム XML 属性) を適用できます。ただし、カスタム属性は CSDL 用に予約されたどの XML 名前空間にも属さない場合があります。カスタム属性の完全修飾名は一意である必要があります。
例
次の例は、2 つのナビゲーション プロパティ (PublishedBy と WrittenBy) を持つエンティティ型 (Book) を定義します。
<EntityType Name="Book">
<Key>
<PropertyRef Name="ISBN" />
</Key>
<Property Type="String" Name="ISBN" Nullable="false" />
<Property Type="String" Name="Title" Nullable="false" />
<Property Type="Decimal" Name="Revision" Nullable="false" Precision="29" Scale="29" />
<NavigationProperty Name="Publisher" Relationship="BooksModel.PublishedBy"
FromRole="Book" ToRole="Publisher" />
<NavigationProperty Name="Authors" Relationship="BooksModel.WrittenBy"
FromRole="Book" ToRole="Author" />
</EntityType>