Поделиться через


Элемент 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)