实体框架函数导入,不能为返回实体类型的函数加载关系

时间:2008-12-16 16:59:11

标签: entity-framework

我创建了一个函数导入,它将存储的进程的结果作为我的实体之一返回。但是我似乎无法遍历导航属性来访问其他实体中的数据。我知道你可以对objectQueries使用include()但是找不到任何会强制EF为函数导入的实体结果加载关系的东西。

任何想法??

提前致谢。

1 个答案:

答案 0 :(得分:5)

这在EF 1.0中是不可能的

原因是EF会将存储过程值视为值而不是导航属性。

例如,Employee实体有多个Order实体。在订单中,您有一个名为EmployeeID的属性。当数据库使用include语句填充您的查询时,它会在SQL中创建1个投影查询,以填充特定员工可能拥有的所有订单数据。

所以,如果我说

var employee = context.Employees.Include(“Orders”)。其中(e => e.ID == 1).First();

var orders = employee.Orders;

第一个查询的SQL将创建一个投影查询,其中包含EmployeeID = 1的订单。

现在,当您的存储过程运行时,这可以在幕后执行任何代码(换句话说,它可以返回任何数据集)。因此,当SQL运行存储过程时,它只运行该存储过程中的代码,并且不知道Order上的EmployeeID是该属性的FK。此外,如果您的存储过程返回一个Employee实体,那么您正在查看另一个您甚至无法继续使用OrderID的方案。

要解决此问题,您可以使用可以镜像任何存储过程的Include语句在EF中设置查询。如果您使用.Select和.Include语句的正确组合,您应该能够做同样的事情。