我正在使用EntityFrameowrk 4和WinForms。 我有一个DataGridView,显示5到12千条记录。记录来自不同级别的层次结构。有班级记录 A,B,C,D,其中A包含B的集合,B包含C等的集合。最多的类是D.在DataGridView中,此层次结构是扁平的,并且每个记录在行中显示有一些颜色/字体格式。为了做这种渲染,我编写了以下代码:
foreach (a in A)
{
var displayObjectA = new DisplayObject()
{
Name = a.Name,
Code = "Section",
Object = a
}
data.Add(displayObjectA);
var B = a.B;
foreach (b in B)
{
var displayObjectB = new DisplayObject()
{
Name = b.Name,
Code = "Subsection",
Object = b
}
data.Add(displayObjectB);
var C = b.C;
foreach (c in C)
{
var displayObjectC = new DisplayObject()
{
Name = c.Name,
Code = "Group",
Object = c
}
data.Add(displayObjectC);
var D = c.D;
foreach (d in D)
{
var displayObjectD = new DisplayObject()
{
Name = d.Name,
Code = d.Code,
Object = d
}
data.Add(displayObjectD);
}
}
}
}
之后,数据将在DataGridView中显示出来。 问题是这种渲染花费的时间太长了。最耗时的部分似乎是行
foreach (d in D)
特别是对函数的调用
System.Data.Objects.DataClasses.EntityCollection<T>.GetEnumerator().
当我在Reflector中查看此函数时,它显示它的主体是空的。
我的问题是:
答案 0 :(得分:3)
.Include()
加载所有内部集合,不要使用延迟加载。否则,对实体的子集合的每次访问都将向DB执行etxra请求。再次,使用分页。