[英]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.