我有一个包含 5 个单独表的实体框架项目。当我从这些表中查询数据并使用.Include()
时,它生成的查询非常慢并且超时。
我已将查询移至存储过程,现在正在寻找一种方法来查询此存储过程,并将其返回的数据轻松映射到现有数据类。
我对 EF 的 DataContext 的原始 Linq 查询如下所示:
var data = (from a in context.A
.Include("B")
.Include("C")
.Include("D")
.Include("E")
where a.Id == someValue
select a);
它返回一个类似于这样的实体数据对象:
class A
{
int Id;
string otherProperties;
List<B> B;
List<C> C;
List<D> D;
List<E> E;
}
EF 生成以在 SQL Server 上运行的查询返回的结果集如下所示:
C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 -------------------------------------------------- -------- A1 A2 B1 B2 A1 A2 C1 C2 A1 A2 C1 C2 A1 A2 C1 C2 A1 A2 D1 D2 A1 A2 D1 D2 A1 A2 D1 D2 A1 A2 E1 E2 A1 A2 E1 E2
(假设 1 个 B 记录、3 个 C 记录、3 个 D 记录和 2 个 E 记录。
我已经在一个存储过程中重现了这个查询,并将它的运行时间减少到几乎没有,但是我一直在试图弄清楚如何将结果集映射到我的实体框架数据类(A
上面的类)。
EF 绝对能够做到这一点,因为当我使用 Linq 查询时它已经在幕后某处做到了,但我不确定这是否是我可以访问的东西。
实体框架中是否有一种简单的方法可以将单个存储过程(函数导入)映射到多级实体框架类?