Элемент NavigationProperty (язык EntityType CSDL)
В Entity Data Model (модель EDM) элемент NavigationProperty объявляет ярлык, который используется для перемещения к сущностям и от сущностей, связанных с типом Association.
К примеру, если ассоциация Association определяется между типом Employee и другим типом Employee, который определяется как менеджер, для сущности Employee может быть указано свойство навигации для перемещения от подчиненного Employee к менеджеру и от менеджера к подчиненному.
В следующем фрагменте сегмента Human Relations схемы AdventureWorksHRModel определяется сущность Employee и ассоциация Association между сущностями Employee, в которой некоторые служащие определяются как менеджеры. Обратите внимание, что ассоциация Association объединяет сущности одного и того же типа, но с разными значениями атрибута Role.
Элемент Association объявляет ассоциацию с именем Employee_Employee_ManagerID. Единственным различающим атрибутом сущностей Employee в элементах этой ассоциации является атрибут Role, указанный в определении AssociationSet. Последний атрибут Role указывает экземпляр EmployeeManager.
Атрибут Multiplicity элементов End в декларации Association указывает, что менеджер Employee может руководить группой, состоящей из нуля или более служащих. Служащий Employee может иметь только одного менеджера, как указано в аргументе RoleEmployeeManager.
<EntityType Name="Employee" Key="EmployeeID">
<Key>
<PropertyRef Name="EmployeeID">
</Key>
<Property Name="EmployeeID" Type="Int32" Nullable="false" />
<!-- Other properties omitted for brevity-->
<NavigationProperty Name="Employee1"
Relationship="Adventureworks.FK_Employee_Employee_ManagerID"
FromRole="Employee" ToRole="Employee1" /> </EntityType>
<NavigationProperty Name="Employee2"
Relationship="Adventureworks.FK_Employee_Employee_ManagerID"
FromRole="Employee1" ToRole="Employee" />
<EntityContainer Name="HumanResources">
<EntitySet Name="Employee" EntityType="Adventureworks.Employee" />
<AssociationSet Name="FK_Employee_Employee_ManagerID"
Association="Adventureworks.FK_Employee_Employee_ManagerID">
<End Role="Employee" EntitySet="Employee" />
<End Role="Employee1" EntitySet="Employee" />
</AssociationSet>
</EntityContainer>
NavigationProperty – это ярлык для сущности Employee, которая является менеджером сущности Employee, содержащей свойство NavigationProperty. При построении модели объектов на основе этих спецификаций класс Employee включает свойство Manager и вспомогательные методы, которые используются для перемещения по ассоциации, определенной элементом NavigationProperty. Вспомогательные методы автоматически создаются вместе с моделью объектов.
Свойства навигации могут быть использованы для реализации свойств, которые функционируют как коллекции в коде. Дополнительные сведения о свойствах навигации и коллекциях см. в разделе Свойства навигации (модель EDM).
Элемент NavigationProperty используется только в языке CSDL. В метаданных языка SSDL существует аналогичный элемент, который указывает связь «первичный — внешний ключ» в базе данных, поддерживающей эту ассоциацию. В метаданных эта ассоциация включает ссылочное ограничение. Дополнительные сведения об атрибуте ReferentialConstraint см. в разделах Элемент ReferentialConstraint (Association, язык SSDL) и Элемент Association (язык SSDL).
См. также
Основные понятия
Связи в модели EDM
Элемент Association (язык CSDL)
Атрибут Multiplicity (Association, язык CSDL)
Полная модель AdventureWorks (модель EDM)
Свойства навигации (модель EDM)
Элемент Association (язык SSDL)
Элемент ReferentialConstraint (Association, язык SSDL)