如何针对递归查询优化LINQ-to-SQL?

时间:2011-07-06 02:30:55

标签: sql entity-framework linq-to-sql common-table-expression recursive-query

我有以下SQL表:

 ObjectTable
--------------------------------------------------
|  ID      |  Name         |  Order  |  ParentID  |
|  int PK  |  nvarchar(50) |  int    |  int FK    |     

ObjectTable.ParentID是一个可空字段,与不同的对象记录ID有关系。 LINQ-to-SQL生成一个类似于以下的类:

 public class DbObject{

      int ID { get; set; }

      string Name { get; set; }

      int Order { get; set; }

      int? ParentID { get; set; }

      DbObject Parent { get; set; }

      EntitySet<DbObject> ChildObjects { get; set; }

 }

当我加载DbObject实例时,我需要能够以递归方式访问子对象,以便我可以将数据写入分层JSON对象。

  • 每次通过DbObject.ChildObjects访问元素时,我都会执行单独的查询吗?由于数据库事务占用时间最长,因此加载递归层次结构似乎是一种非常低效的方法。

  • 使用LINQ-to-SQL和/或EF执行递归查询的最佳做法是什么?

  • LINQ-to-SQL是否与Common Table Expressions集成? 我找到了Common Table Expression (CTE) in linq-to-sql?

1 个答案:

答案 0 :(得分:3)

在我们的例子中,我们用CTE创建了存储过程并将它们放在l2s设计器上,它们像其他任何表一样工作,除了它们表现为方法而不是属性,到目前为止我们没有遇到任何问题。