EntityCollection<TEntity>.Load(MergeOption) 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
使用指定的合併選項,將相關物件載入集合中。
public:
override void Load(System::Data::Objects::MergeOption mergeOption);
public override void Load (System.Data.Objects.MergeOption mergeOption);
override this.Load : System.Data.Objects.MergeOption -> unit
Public Overrides Sub Load (mergeOption As MergeOption)
參數
- mergeOption
- MergeOption
指定這個集合中的物件應該如何與可能已經從針對相同 ObjectContext 的先前查詢所傳回的物件合併。
範例
這個範例是根據 Adventure Works Sales Model。 若要執行此範例中的程式碼,您必須已經將 AdventureWorks Sales Model 加入到專案中,並設定您的專案使用 Entity Framework。 若要這樣做,請完成 如何:手動設定 Entity Framework 專案 和 如何:手動定義模型和對應檔案中的程式。
這個範例會載入 SalesOrderHeader
實體的相關 Contact
物件。
// Specify the customer ID.
int contactID = 4332;
using (AdventureWorksEntities context =
new AdventureWorksEntities())
{
context.ContextOptions.LazyLoadingEnabled = false;
// Get a specified customer by contact ID.
var contact =
(from c in context.Contacts
where c.ContactID == contactID
select c).First();
// Load the orders for the customer explicitly.
if (!contact.SalesOrderHeaders.IsLoaded)
{
contact.SalesOrderHeaders.Load();
}
foreach (SalesOrderHeader order in contact.SalesOrderHeaders)
{
// Load the items for the order if not already loaded.
if (!order.SalesOrderDetails.IsLoaded)
{
order.SalesOrderDetails.Load();
}
Console.WriteLine(String.Format("PO Number: {0}",
order.PurchaseOrderNumber));
Console.WriteLine(String.Format("Order Date: {0}",
order.OrderDate.ToString()));
Console.WriteLine("Order items:");
foreach (SalesOrderDetail item in order.SalesOrderDetails)
{
Console.WriteLine(String.Format("Product: {0} "
+ "Quantity: {1}", item.ProductID.ToString(),
item.OrderQty.ToString()));
}
}
}
備註
這個方法會在載入集合之前先呼叫內部 RelatedEnd.ValidateLoad
方法,以驗證的 Load 呼叫是否具有正確的條件。 方法會 RelatedEnd.ValidateLoad
檢查:
- 有效 ObjectContext 存在。
- 實體不是處於 Deleted 狀態。
- MergeOptionLoad只有在來源實體為 NoTracking時,才必須是 NoTracking 。 如果來源實體是以任何其他 MergeOption方式擷取, LoadMergeOption 則 可以是 (以外的 NoTracking 任何專案,例如,該實體可能已載入 OverwriteChanges ,而且 Load 選項可以 AppendOnly) 。
- 如果
mergeOption
為 NoTracking, Load 則不會在已載入的實體上呼叫 ,而且 Load 未在非空白且未追蹤 RelatedEnd的 上呼叫 。
當集合中的物件已經載入 至 ObjectContext時,方法會LoadMergeOption強制執行 參數所mergeOption
指定的 。 如需詳細資訊,請參閱身分識別解析、狀態管理和變更追蹤。
若要明確載入相關物件,您必須在導覽屬性所傳回的相關端呼叫 Load
方法。 若為一對多關聯性,請在上EntityCollection<TEntity>呼叫 Load 方法。 若為一對一關聯性,請在上EntityReference<TEntity>呼叫 Load 。 這樣就會將相關物件資料載入物件內容中。 您可以使用 Visual) Basic 中的循環 (For Each...Next
來列舉傳回的結果foreach
集合,並有條件地呼叫Load
結果中每個實體的 EntityReference<TEntity> 和 EntityCollection<TEntity> 屬性。
Load方法會從資料來源載入相關物件,不論是否IsLoaded為 true
。
注意
於 Load (C#) 或 foreach
(Visual Basic) 列舉期間呼叫 For Each
方法時,物件服務會嘗試開啟新的資料讀取器。 除非您在連接字串中指定 multipleactiveresultsets=true
啟用多個現用結果集,否則這項作業將會失敗。 您也可以將查詢的結果載入 List<T> 集合中。 這樣會關閉資料讀取器,並且讓您列舉集合,以便載入參考的物件。
EntityCollection<TEntity>.Load 方法會與 EntityReference<TEntity>.Load 方法同步處理。
適用於
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應