1

我有以下 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吗?由于 DB 事务花费的时间最长,因此这似乎是一种非常低效的加载递归层次结构的方法。

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

  • LINQ-to-SQL 是否与公用表表达式集成? 在 linq-to-sql 中找到了公用表表达式 (CTE)?

4

1 回答 1

3

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

于 2011-07-06T05:27:21.763 回答