实体框架非常慢,所以我尝试使用存储过程,但遇到了这个问题。
Entity Framework 允许您定义生成实体的存储过程。但是,我的实体具有使用此方法时未填充的“导航属性”。
有解决办法吗?
实体框架非常慢,所以我尝试使用存储过程,但遇到了这个问题。
Entity Framework 允许您定义生成实体的存储过程。但是,我的实体具有使用此方法时未填充的“导航属性”。
有解决办法吗?
存储良好的过程是不可组合的。所以没有办法调用你的 SPROC 并让 EF 在同一个查询中自动填充关系,使用 Include() 或其他东西。
所以说你有产品和类别
并且您有一个存储过程来获取产品:
IE
var products = context.GetProducts(someproductfilter);
生成的产品不会加载其类别。
但是,如果您有第二个存储过程来获取所述产品的类别:
IE
var categories = context.GetCategoriesForProducts(someproductfilter);
EF 中称为关系修复的功能,一旦第二个实体进入上下文就链接相关实体,将确保在进行两次调用后,产品中的每个产品都将具有非空类别。
这并不理想,因为您正在执行多个查询,但它会起作用。
另一种方法是使用EFExtensions。编写该代码的人创造了编写存储过程的能力,这些存储过程可以一次性加载更多数据。
希望这可以帮助
干杯亚历克斯
我在使用 EF 研究存储过程 (SP) 时发现了这个 SO 问题。我还看到 @KristianNissen 和 @Todilo 等人询问是否有 EF6 的更新。
答案是肯定的,EF 6 改变了一些东西,但它没有添加任何东西来帮助在使用 SP 时加载导航属性。你也不能像这个SO question中所问的那样对 SP 使用 .Include() 方法。
唯一的方法是编写您的 SP 来专门加载导航属性。然而,现在有一些关于使用 SP 的很好的 Microsoft 文档 - 请参阅查询 SP和SP 返回多个结果集。
为了完整起见,EF 版本 6 带来的更改是允许存储过程 (SP) 处理插入、更新和删除 - 请参阅Microsoft 文章和实体框架教程。