Свойства навигации

Свойства навигации в Entity Framework обеспечивают навигацию по сопоставлению между двумя типами сущностей. Свойство навигации определяется элементом Элемент NavigationProperty (язык CSDL) в концептуальной модели. Каждый объект может обладать свойством навигации для каждого отношения, в котором участвует. С помощью свойств навигации можно переходить по отношениям и управлять ими в обоих направлениях, возвращая EntityReference для кратности «один» либо «ноль или один» или EntityCollection для кратности «много». Можно также выбрать одностороннюю навигацию, при этом станет возможным удаление свойства навигации. Дополнительные сведения см. в разделе How to: Edit and Delete Navigation Properties.

При использовании классов, созданных Entity Framework , свойства навигации создаются для объектов, участвующих в отношении. Сведения о работе со свойствами навигации в сущностях POCO см. в разделе Требования к созданию прокси-сущностей POCO (платформа Entity Framework).

Изменение отношений

Свойства навигации можно использовать для изменения отношения. В следующем примере заказу присваивается другой клиент с использованием свойства навигации Customer в объекте Order. Это делается для доступа к ссылке на клиента, связанной с заказом: order.Customer = customer.

В следующем примере заказ добавляется к существующему заказу клиента с использованием свойства навигации Orders для доступа к коллекции orders, принадлежащей к customer:

customer.Orders.Add(order).

В сопоставлении на основе внешнего ключа можно создать или изменить отношение, задав значение свойства внешнего ключа зависимого объекта, как показано в следующем примере:

order.CustomerID = CustomerID.

Дополнительные сведения о независимом сопоставлении и сопоставлении на основе внешнего ключа см. в разделе Определение отношений и управление отношениями (платформа Entity Framework).

Можно использовать свойства навигации для загрузки объектов, которые связаны с сущностью с помощью определенного сопоставления. Дополнительные сведения см. в разделах Загрузка связанных объектов (платформа Entity Framework) и Как переходить по связям с помощью свойств навигации (платформа Entity Framework).

Навигация по отношениям

В следующем примере синтаксиса запроса на основе методов используется метод SelectMany, чтобы получить все заказы контактных лиц с фамилией «Zhou». Свойство навигации Contact.SalesOrderHeader используется для получения коллекции объектов SalesOrderHeader для каждого контактного лица.

Dim lastName = "Zhou"
Using context As New AdventureWorksEntities
    Dim ordersQuery = context.Contacts _
    .Where(Function(c) c.LastName = lastName) _
    .SelectMany(Function(o) o.SalesOrderHeaders)

    For Each order In ordersQuery
        Console.WriteLine("Order ID: {0}, Order date: {1}, Total Due: {2}", _
                order.SalesOrderID, order.OrderDate, order.TotalDue)
    Next
End Using
string lastName = "Zhou";
using (AdventureWorksEntities context = new AdventureWorksEntities())
{
    IQueryable<SalesOrderHeader> ordersQuery = context.Contacts
        .Where(c => c.LastName == lastName)
        .SelectMany(c => c.SalesOrderHeaders);

    foreach (var order in ordersQuery)
    {
        Console.WriteLine("Order ID: {0}, Order date: {1}, Total Due: {2}",
            order.SalesOrderID, order.OrderDate, order.TotalDue);
    }
}

См. также

Основные понятия

Определение отношений и управление отношениями (платформа Entity Framework)