將自引用類別表結構對應到EF Core
問題源自於擷取層次結構的複雜性,例如類別表及其ParentId列,在EF Core 和LINQ 的限制內。為了解決這個問題,我們採用了遞歸函數來手動遍歷類別並填入 ChildCategories 屬性。
但是,出現了一種利用EF Core 全部功能的更有效率的解決方案:
使用單一包含
與之前嘗試載入樹的一部分不同Include(),此方法涉及ChildCategories 屬性上的單一Include()。這與將查詢具體化為 LINQ to Objects 上下文結合,允許 EF Core 的導航屬性修復來處理對應。
透過篩選優化檢索
至根據儲存庫的GetAll() 方法的要求,僅檢索類別樹的根節點,在查詢完成後應用過濾器Materialized :
return Table .AsEnumerable() .Where(x => x.ParentId == null) .ToList();
透過使用AsEnumerable() 將查詢具體化到LINQ to Objects在上下文中,可以在應用篩選之前修復導航屬性。這導致單一 SQL 查詢可以有效地檢索所需的層次結構,而不需要遞歸函數。
以上是EF Core 如何有效率地對應自引用類別表以進行分層資料檢索?的詳細內容。更多資訊請關注PHP中文網其他相關文章!