Linq to Entities - 从存储过程中检索具有“自引用”的实体

时间:2009-08-20 15:33:01

标签: entity-framework stored-procedures entity parent-child

我无法理解这一点。我有一个名为Employee with和Id字段的表。该表还包含一个ManagerId字段,该字段具有指向Employee的Id字段的外键。当我将表作为实体添加到我的实体数据模型时,它使用EmployeeChildren集合元素和EmployeeParent元素创建新的Employee实体。我可以检索所有员工,并将他们放入Employee实体的新实例中。员工实体将拥有许多子项,每个子实体可以拥有许多自己的子项,每个子项都有一个指向其父项的指针。

我现在需要做的是使用存储过程检索这些员工的子集。现在,如果我搜索员工John Doe,他有2个人,那么存储过程将返回3行。

EmployeeID ManagerId Name

1 null Bill

2 1简

3 2 John Doe

以下是我的检索代码:

using (var entity = new TimeEntryEntities())
    {

         var employees =
                 from E in entity.EmployeeSearch(search)
                 orderby E.Name
                 select E;


         return employees.ToList<Employee>();
    }

现在,此代码返回3个独立的实体。我如何将它们组合成一个?

2 个答案:

答案 0 :(得分:0)

这听起来像是在试图压缩层次结构,因此只返回一条记录。也许存储过程中的公用表表达式(CTE)可以帮助: Here is an alternate of a similar request

另外another example with more detail(但您必须免费注册):

答案 1 :(得分:-1)

您应该只返回您感兴趣的实体.EF将自动为您检索相关实体。 如果我们没有使用自引用,这将更容易可视化,这个概念已经妨碍了。