【发布时间】:2014-11-05 17:40:03
【问题描述】:
我首先使用的是 Entity Framework 6.x 数据库和一个 SQL Azure 数据库。
我有一个 Studies 数据库表和一个单独的 Respondents 表。在我的 EF 设计器中,我有一个 Studies 实体和 Respondents 实体,并且该 Studies 实体有一个针对 Respondents 的导航属性。每项研究可以有数千名受访者,并且有数百项研究。
我的问题是我试图在 Studies 表上创建一个计算列,其中包含 COUNT 的受访者,并且我试图急切地加载这个值。我需要预先加载的原因是因为我正在使用研究列表填充 DataGrid (WPF),并且我的网格中的列之一是 RespondentCount。如果我不急于加载这个值,那么我的数据网格上的滚动会很卡,因为当用户滚动网格时 RespondentCounts 会延迟加载。
我当然可以使用以下语句加载所有受访者:
ctx.Studies.Include(s => s.Respondents)
然后在 Respondents Navigation 属性上执行 .COUNT(),但我会为每个研究加载数千个 Respondents,这是一个巨大的性能损失和大量内存浪费,因为我只需要 COUNT。
我真正需要的是:
ctx.Studies.Include(s => s.Respondents.Count)
但这不起作用。
我尝试设置一个包含 Studies 表的数据库视图,其中包含一个简单的 RespondentCount 计算字段,但 VIEW 在实体框架中是只读的,当我将 VIEW 带入时,我丢失了 Studies 表上的所有其他外键关系EF 设计师。
如何在无需加载所有受访者的情况下快速加载此聚合值?
【问题讨论】:
标签: c# sql-server entity-framework entity-framework-6