我使用ASP.NET MVC 5和EF 6,代码优先。我有实体A和B,其中A有B的集合。
我想制作一组看起来像这样的视图模型:
class ViewModelForA{
public int SomePropertyOfA {get;set};
public int BCount {get;set;}
}
查询如下所示:
dbCtx.A.Select(x=>
new ViewModelForA {
SomePropertyOfA = x.Prop,
BCount = x.Bs.Count() //problem
});
使用MiniProfiler miniprofiler我看到为每个人生成了一个唯一的sql select语句 Bs的数量。假设我在A中有100个B,这就变慢了。
这是从x.Bs.Count()
生成的SQL:
SELECT
[Extent1].[Id] AS [Id],
'more columns, omitted sql
FROM [dbo].[B] AS [Extent1]
WHERE [Extent1].[AId] = @EntityKeyValue1
我想我会得到这样的东西:
SELECT COUNT(*)
FROM [dbo].[B] AS [Extent1]
WHERE [Extent1].[AId] = @EntityKeyValue1
这不是缓存计数值的问题,而是在尽可能少生成sql选项的情况下优化视图模型的创建。 顺便说一句,我不想使用急切加载,因为A和B(在实际代码中)非常重量级。
我该怎么做?