要模擬延遲加載,我希望有一個遞歸方式通過Eager Loading加載完整的對象圖,以便在加載實體時,其所有相關數據是加載以及。我如何遞歸地包含所有可導航的屬性來模擬延遲加載
從MSDN文檔:
- 包括單個參考:query.Include(E => e.Level1Reference)。
- 要包含單個集合:query.Include(e => e.Level1Collection)。
- 要包含引用,然後向下引用一個引用:query.Include(e => e.Level1Reference.Level2Reference)。
- 要包含引用,然後向下包含一個集合:query.Include(e => e.Level1Reference.Level2Collection)。
- 要包含一個集合,然後向下引用一個引用:query.Include(e => e.Level1Collection.Select(l1 => l1.Level2Reference))。
- 要包含一個集合,然後向下一級集合:query.Include(e => e.Level1Collection.Select(l1 => l1.Level2Collection))。
- 要包含一個集合,然後向下引用一個引用:query.Include(e => e.Level1Collection.Select(l1 => l1.Level2Reference))。
- 要包含一個集合,然後向下一級集合:query.Include(e => e.Level1Collection.Select(l1 => l1.Level2Collection))。
- 要包含一個集合,一個引用和一個引用兩個層次:query.Include(e => e.Level1Collection.Select(l1 => l1.Level2Reference.Level3Reference))。
- 要包括一個集合,一個集合和一個引用兩個級別:query.Include(e => e.Level1Collection.Select(l1 => l1.Level2Collection.Select(l2 => l2.Level3Reference)))。
問:
我怎樣才能遞歸包括所有通航性能和建造這個爲通用倉庫方法,以便在需要時我可以得到一個實體的深對象圖,無論如果添加了新的特性?
你可能不希望這樣做。查詢中包含的數量建議不要超過三個。尤其是當包含導致星形查詢時,結果集很快就會爆炸成難以管理的比例。 – 2013-03-21 22:25:02
不可能與LINQ(到實體)。我聽說過的唯一方法是使用SQL公用表表達式(CTE)的存儲過程:http://stackoverflow.com/a/11621006/270591 – Slauma 2013-03-21 22:39:34
這將是一次性方法,所以我並不擔心關於性能,我只是試圖確保我得到一個完整的實體圖(就像懶惰加載已啓用),現在,我通過手動包含所有可導航屬性來實現此功能,但是當模型更改時,我必須去更新我的GetFullEntity方法,這是我試圖解決這個問題。 – user1265146 2013-03-22 00:14:56