簡體   English   中英

Linq 到實體和層次表

[英]Linq to entities and Hierarchical table

我有一個包含 id 和 parentId 列的表,嵌套級別僅為 1(目前)。
現在我加載這樣的項目:

using (KEntities ctx = new KEntities())
{
    ctx.KSet.MergeOption = MergeOption.NoTracking;

    var items = (from c in ctx.KSet
                 where c.ParentId == 0
                 select new
                 {
                     Title = c.Title,
                     Id = c.Id,                           
                     Subs = ctx.KSet.Where(o => o.ParentId == c.Id)                                      
                 }).ToList();

 }

我可以選擇的另一個選項是在表上設置自引用,因此實體將公開自導航屬性,然后我可以使用 Load() 加載子項(延遲加載?)。

首選哪種方法,為什么?

恕我直言,我更喜歡您在示例中所做的事情。 我喜歡調用 the.ToList() 因為那時我知道我在 memory 中有數據,並且不必擔心延遲加載可能會遇到的一些問題。

“它通過延遲加載關聯泄露對不同層的持久存儲訪問。” 取自鏈接

有效的選項是公開導航屬性Children並調用:

var items = ctx.KSet.Include("Children").Where(c => c.ParentId == 0);

這將允許您直接使用KSet實體。 投影將創建一個新類型。 在公開導航屬性的情況下,您還可以選擇使用急切加載(如示例中所示)或顯式/延遲加載(如果您願意)。 僅當您要過濾或排序子項時,投影才有意義。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM