我已经创建了一个函数导入,它将存储的进程的结果作为我的实体之一返回.但是我似乎无法遍历导航属性来访问其他实体中的数据.我知道你可以对objectQueries使用include()但是找不到任何会强制EF为函数导入的实体结果加载关系的东西.
有任何想法吗??
提前致谢.
这在EF 1.0中是不可能的
原因是EF会将存储过程值视为值而不是导航属性.
例如,Employee实体具有多个Order实体.在订单中,您有一个名为EmployeeID的属性.当数据库使用include语句填充查询时,它会在SQL中创建1个投影查询,以填充特定Employee可能拥有的所有Order数据.
如果我说的话
var employee = context.Employees.Include("Orders").Where(e => e.ID == 1).First();
var orders = employee.Orders;
第一个查询的SQL将创建一个投影查询,其中包含EmployeeID = 1的订单.
现在,当您的存储过程运行时,这可以在幕后执行任何代码(换句话说,它可以返回任何数据集).因此,当SQL运行存储过程时,它只运行该存储过程中的代码,并且不知道Order上的EmployeeID是该属性的FK.此外,如果您的存储过程返回一个Employee实体,那么您正在查看另一个您甚至无法继续使用OrderID的方案.
但是要解决此问题,您可以使用可以镜像任何存储过程的Include语句在EF中设置查询.如果你使用.Select和.Include语句的正确组合,你应该能够做同样的事情.