2011-03-29 96 views
0

背景:如何緩存延遲加載特性

我有兩個表masterdetaildetail中的每一行都包含master的屬性(延遲加載)。

我想緩存的detail與他們的主人收集類似下面的集合:

List<Detail> cachedItems = entities.Details.ToList(); 

foreach (var d in cachedItems) 
    d.master // throws exception 

的ObjectContext的實例已經設置,不能再用於需要連接的操作。

問題:

我如何可以緩存與detail對象master對象,而無需使用另外一個集合,我寧願讓他們在一個往返。

回答

2

您可以嘗試使用Include函數來塑造您的查詢結果。

+1

然後,他可以緩存與他的潛在孩子的主人。 – 2011-03-29 09:26:26

1

在關閉ObjectContext之前,您必須明確獲取主記錄。如果Detail實體的導航屬性被稱爲Master修改您的數據檢索查詢:

List<Detail> cachedItems = entities.Details.Include("Master").ToList(); 

或者在使用Include擴展方法的形式EF 4.1

List<Detail> cachedItems = entities.Details.Include(d => d.Master).ToList(); 

這將加載的情況下,與他們的主人的詳細信息立即進行一次往返。

+0

謝謝。它工作得很好。 – Homam 2011-03-29 09:41:25