ナビゲーション プロパティ
"ナビゲーション プロパティ" は、アソシエーションの 1 つの End から別の End へのナビゲーションを可能にする、エンティティ型の省略可能なプロパティです。 他のプロパティとは異なり、ナビゲーション プロパティではデータは伝達されません。
ナビゲーション プロパティの定義には、以下が含まれます。
名前。 (必須)
移動対象のアソシエーション。 (必須)
移動対象のアソシエーションの End。 (必須)
ナビゲーション プロパティは、アソシエーション End の両方のエンティティ型で省略可能です。 1 つのアソシエーション End のエンティティ型にナビゲーション プロパティを定義した場合に、そのアソシエーションの他方の End でもエンティティ型にナビゲーション プロパティを定義する必要はありません。
ナビゲーション プロパティのデータ型は、リモートのアソシエーション End の多重度により決まります。 たとえば、ナビゲーション プロパティ OrdersNavProp
が Customer
エンティティ型に存在し、Customer
と Order
の間の一対多のアソシエーションで移動するとします。 ナビゲーション プロパティのリモートのアソシエーション End の多重度が多数 (*) であるため、そのデータ型は (Order
の) コレクションになります。 同様に、CustomerNavProp
エンティティ型にナビゲーション プロパティ、Order
が存在する場合、リモート End の多重度が (1) であるため、データ型は Customer
になります。
例
下のダイアグラムは、Book
、Publisher
、および Author
という 3 つのエンティティ型の概念モデルを示しています。 ナビゲーション プロパティ Publisher
と Authors
が、Book エンティティ型で定義されています。 Publisher エンティティ型と Books
エンティティ型には、ナビゲーション プロパティ、Author
が定義されています。
ADO.NET Entity Framework では、概念スキーマ定義言語 (CSDL) と呼ばれるドメイン固有言語 (DSL) を使用して概念モデルを定義します。 次の CSDL は、上のダイアグラムに示された 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>
ナビゲーション プロパティの定義に必要な情報の伝達には、XML 属性が使用されます。属性 Name
にはプロパティ名が含まれ、Relationship
にはナビゲートするアソシエーション名が含まれ、FromRole
と ToRole
にはアソシエーションの End が含まれています。