我有以下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?
答案 0 :(得分:3)
在我们的例子中,我们用CTE创建了存储过程并将它们放在l2s设计器上,它们像其他任何表一样工作,除了它们表现为方法而不是属性,到目前为止我们没有遇到任何问题。