導覽屬性

Entity Framework 中的導覽屬性提供可巡覽兩個實體類型間之關聯的方式。 導覽屬性在概念模型中是透過 NavigationProperty 項目 (CSDL)來定義。 每個物件都可以針對它所參與的每項關聯性擁有導覽屬性。 導覽屬性可讓您巡覽及管理雙向的關聯性,如果多重性是一個或零或多個會傳回 EntityReference,或者如果多重性是很多個,則傳回 EntityCollection。 您也可以選擇擁有單向導覽,這種情況下您可以刪除導覽屬性。如需詳細資訊,請參閱 How to: Edit and Delete Navigation Properties

當您使用 Entity Framework 產生之類別時,會針對參與關聯性的物件建立導覽屬性。 如需在 POCO 實體中使用導覽屬性的資訊,請參閱建立 POCO Proxy 的需求 (Entity Framework)

修改關聯性

您可以使用導覽屬性來變更關聯性。 以下範例會將不同的客戶指派給訂單,透過在 Order 物件上使用 Customer 導覽屬性來存取與該訂單相關之客戶參考:order.Customer = customer

以下範例會使用 Orders 導覽屬性來存取屬於 customerorders 的集合,藉以將訂單加入至現有的客戶訂單。

customer.Orders.Add(order).

在外部索引鍵關聯中,您可以透過設定相依物件的外部索引鍵屬性,形成或變更關聯性,如下列範例所示:

order.CustomerID = CustomerID.

如需獨立關聯和外部索引鍵關聯的詳細資訊,請參閱定義及管理關聯性

您可以使用導覽屬性載入與實體有關之物件,而這些實體是由關聯所定義的。 如需詳細資訊,請參閱載入相關的物件 (Entity Framework)HOW TO:使用導覽屬性巡覽關聯性 (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);
    }
}

另請參閱

概念

定義及管理關聯性