導覽屬性
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
導覽屬性來存取屬於 customer
之 orders
的集合,藉以將訂單加入至現有的客戶訂單。
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);
}
}