Свойство навигации
Свойство навигации — это необязательное свойство типа сущности, позволяющее переходить от одной части связи к другому концу. В отличие от других свойств, свойства навигации не несут данные.
Определение свойства навигации содержит следующую информацию.
Имя. (обязательно)
Ассоциация, для которой осуществляется переход. (обязательно)
Конечные точки ассоциации, для которой осуществляется переход. (обязательно)
Свойства навигации являются необязательными для обоих типов сущностей в концах ассоциации. Если свойство навигации было определено для типа сущности на одном конечном элементе ассоциации, то определять его для типа сущности на другом конечном элементе необязательно.
Тип данных свойства навигации определяется кратностью его конца удаленной связи. Например, предположим, что свойство навигации OrdersNavProp
существует для типа сущности Customer
и осуществляет навигацию по ассоциации «один ко многим» между Customer
и Order
. Так как конец удаленной связи для свойства навигации имеет кратность множества (*), его тип данных — это коллекция (из Order
). Аналогично, если свойство навигации CustomerNavProp
существует для типа сущности Order
, то его тип данных будет Customer
, поскольку кратность удаленного конечного элемента - «один» (1).
Пример
На приведенной ниже схеме показана концептуальная модель с тремя типами сущностей: Book
, Publisher
и Author
. Свойства Publisher
навигации и Authors
определены в типе сущности Book. Свойство навигации Books
определено как относительно типа сущности «Publisher», так и относительно типа сущности Author
.
В ADO.NET Entity Framework используется язык, зависящий от домена (DSL), называемый языком определения концептуальной схемы (CSDL) для определения концептуальных моделей. Ниже на языке 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
содержит концы ассоциации.