当前位置:  开发笔记 > 数据库 > 正文

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

如何解决《实体框架函数导入,不能为返回实体类型的函数加载关系》经验,为你挑选了1个好方法。

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

有任何想法吗??

提前致谢.



1> jwendl..:

这在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语句的正确组合,你应该能够做同样的事情.

推荐阅读
mobiledu2402852357
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有