C# 在实体框架中使用存储过程,如何让实体填充其导航属性?

C# 在实体框架中使用存储过程,如何让实体填充其导航属性?,c#,.net,entity-framework,entity,C#,.net,Entity Framework,Entity,实体框架非常慢,所以我尝试使用存储过程,但遇到了这个问题 实体框架允许您定义生成实体的存储过程。但是,我的实体具有“导航属性”,使用此方法时不会填充这些属性 有解决办法吗?良好的存储过程是不可组合的。因此,无法使用Include()或其他方法调用存储过程并让EF自动填充同一查询中的关系 所以说你有产品和类别 而且您有一个获取产品的存储过程: i、 e 生成的产品不会加载其类别 但是,如果您有第二个存储过程来获取所述产品的类别: i、 e EF中一个名为relationship fixup的功能将

实体框架非常慢,所以我尝试使用存储过程,但遇到了这个问题

实体框架允许您定义生成实体的存储过程。但是,我的实体具有“导航属性”,使用此方法时不会填充这些属性


有解决办法吗?

良好的存储过程是不可组合的。因此,无法使用Include()或其他方法调用存储过程并让EF自动填充同一查询中的关系

所以说你有产品和类别

而且您有一个获取产品的存储过程:

i、 e

生成的产品不会加载其类别

但是,如果您有第二个存储过程来获取所述产品的类别:

i、 e

EF中一个名为relationship fixup的功能将在第二个实体进入上下文后链接相关实体,该功能将确保在两次调用后,products中的每个产品都将具有非空类别

这并不理想,因为您正在执行多个查询,但它可以工作

另一种选择是使用。写这篇文章的人创造了编写存储过程的能力,可以一次性加载更多数据

希望这有帮助

干杯
Alex

我在使用EF研究存储过程(SP)时发现了这个问题。我还看到像@KristianNissen和@Todilo这样的人询问EF6是否有更新

答案是肯定的,EF6已经改变了一些事情,但是它没有添加任何东西来帮助在使用SPs时加载导航属性。也不能像本文中所要求的那样对SPs使用.Include()方法

唯一的方法是编写SP以专门加载导航属性。不过,现在有一些关于使用SPs的Microsoft文档-请参阅和


为了完整起见,EF版本6带来的变化是允许存储过程(SP)处理插入、更新和删除-请参阅和。

也许您可以给我们一些例子,说明您使用EF所做的工作“极其缓慢”?我没有发现EF在大多数情况下都会明显变慢,除非我做了一些导致效率低下的事情。这个答案是最新的吗我正在寻找与OP完全相同的方法。@KristianNissen你有没有找到更好的方法?已经5年了,所以希望EF6有一个解决方案。
var products = context.GetProducts(someproductfilter);
var categories = context.GetCategoriesForProducts(someproductfilter);