导航属性
导航属性是实体类型上的可选属性,它允许从关联的一端导航到另一端。 与其他属性不同,导航属性并不携带数据。
导航属性定义包含以下信息:
名称。 (必需)
导航属性要导航的关联。 (必需)
导航属性要导航的关联端。 (必需)
对于关联两端的两种实体类型,导航属性都是可选的。 如果您对于位于关联一端的实体类型定义一个导航属性,则不需要对于位于关联另一端的实体类型定义导航属性。
导航属性的数据类型由其远程关联端的基数决定。 例如,假设导航属性 OrdersNavProp
存在于 Customer
实体类型上并导航 Customer
与 Order
之间的一对多关系。 因为导航属性的远程关联端具有多个 (*) 的多重性,所以其数据类型是一个集合(属于 Order
)。 同样,如果导航属性 CustomerNavProp
存在于 Order
实体类型上,但由于远程端的重数为“一 (1)”,所以其数据类型应为 Customer
。
示例
下图显示了一个具有三个实体类型的概念模型:Book
、Publisher
和 Author
。 导航属性 Publisher
和 Authors
都在 Book 实体类型上定义。 导航属性 Books
是同时在 Publisher 实体类型和 Author
实体类型上定义的。
ADO.NET 实体框架使用一种称为“概念架构定义语言 (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
则包含关联各端。