当我们谈论延迟加载时,我们正在谈论导航属性(我们如何遵循外键)。延迟加载将为我们做的是在我们尝试访问该实体时从远程表中填充该实体。例如,如果我们有这样的模型
public class TestEntity
{
public int Id{get;set;}
public AnotherEntity RemoteEntity{get;set;}
}
并调用以下
var something = WhateverContext.TestEntities.First().RemoteEntity;
我们将获得 2 个数据库调用,一个WhateverContext.TestEntities.First()
用于加载远程实体,一个用于加载远程实体。
我是一个网络人,(更具体地说是一个 MVC 人),对于网络东西,我认为没有充分的理由想要这样做,如果我们需要,一个数据库调用总是比两个快同一组数据。
我认为延迟加载实际上值得考虑的情况是,当您不知道何时进行第一次查询时,您是否需要第二个实体。在我看来,这与我们有一个实时执行操作的用户的 Windows 应用程序更相关(而不是用户一次请求整个页面的无状态 MVC)。例如,当我们有一个带有详细信息链接的数据列表时,我认为延迟加载会大放异彩,然后我们不会加载详细信息,直到用户决定他们想要查看它们。
我不认为这延伸到分页、排序和过滤,IMO 应该有一个专门设计的数据库查询,每页显示的数据,它返回的正是显示该页面所需的数据集。
就您的性能问题而言,我认为 EF(或其他 ORM)可能在这里可以满足您的需求,但是由于 EF 跟踪实体的方式,您要小心如何检索大型数据集。查看我的EF 性能调整备忘单,如果您决定将 EF 用于大型查询,请阅读DetectChanges和AsNoTracking 。