Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework Linq到实体-使用“检索实体”;自我参照;从存储过程_Entity Framework_Stored Procedures_Entity_Parent Child - Fatal编程技术网

Entity framework Linq到实体-使用“检索实体”;自我参照;从存储过程

Entity framework Linq到实体-使用“检索实体”;自我参照;从存储过程,entity-framework,stored-procedures,entity,parent-child,Entity Framework,Stored Procedures,Entity,Parent Child,我不太明白这一点。我有一个名为Employee的表,其中包含和Id字段。该表还包含一个ManagerId字段,该字段的外键指向员工的Id字段。当我将表作为实体添加到实体数据模型时,它将创建一个新的EmployeeChildren集合元素和EmployeeParent元素的Employee实体。我可以检索所有员工的,并将其放入employee实体perfect的新实例中。员工实体将有多个子实体,每个子实体可以有自己的多个子实体,每个子实体都有一个指向其父实体的指针 我现在需要做的是使用存储过程检索

我不太明白这一点。我有一个名为Employee的表,其中包含和Id字段。该表还包含一个ManagerId字段,该字段的外键指向员工的Id字段。当我将表作为实体添加到实体数据模型时,它将创建一个新的EmployeeChildren集合元素和EmployeeParent元素的Employee实体。我可以检索所有员工的,并将其放入employee实体perfect的新实例中。员工实体将有多个子实体,每个子实体可以有自己的多个子实体,每个子实体都有一个指向其父实体的指针

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

EmployeeID ManagerId名称

1无效票据

2.1简

3.2无名氏

以下是我执行检索的代码:

using (var entity = new TimeEntryEntities())
    {

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


         return employees.ToList<Employee>();
    }
使用(var entity=new TimeEntryEntities())
{
var员工=
来自entity.EmployeeSearch(搜索)中的E
orderbye.Name
选择E;
return employees.ToList();
}

现在,这段代码返回3个独立的实体。我怎样才能让它将它们组合成一个呢?

听起来你好像在试图将层次结构扁平化,因此只返回一条记录。存储过程中的公共表表达式(CTE)可能有助于: :


另外(但您必须免费注册):

您应该只返回您感兴趣的实体。EF将自动为您检索相关实体。
如果您不使用自引用,这将更容易可视化,因为这一概念已成为障碍。

当您不使用存储过程时,这是否能按预期工作?如果使用LINQ查询直接检索单个员工,“经理”和“报告”集合是否按应有的方式填充?它确实可以工作,但不会按我需要的方式返回。它将检索员工,该实体将具有父实体。父实体将有父实体和子实体…以此类推。我需要它从最高级别的父级开始,而不是从较低级别的子级开始。我希望这是有意义的。我在返回3行的过程中使用了CTE。它找到子行,然后使用CTE返回父行…然后返回父行的父行…等等。这将导致从数据库返回3行。现在我需要将这些行放入我的Employee实体中。我想知道在这种情况下是否需要手动执行此操作,而忽略linq to实体。