我正在从一个 ORM 转换为另一个(LLBGen Pro 到实体框架)。为了正确重构,我需要了解一些东西。在 LLBGen Pro 中有一个称为预取路径的概念。存在预取路径是为了减少延迟加载对性能产生负面影响的情况下所需的查询数量。在 Gen Pro 中,假设我有 50 个订单,我想收集与每个订单相关的客户。通过延迟加载,我可以得到 51 个数据库查询。由于客户的延迟加载,订单有 1 个,每个客户有 50 个,而启用预取路径的查询只有 2 个。
我的理解是实体框架(或者可能是 LINQ to SQL)为这种情况生成了最优化的 SQL。在 LLB Gen Pro 无法做到的情况下,实体框架是否足够智能以优化查询?换句话说,实体框架是否在运行时智能地生成 SQL,它可以“向前看”并看到所有客户的需求并生成单个查询而不是 50 个单独的查询?或者,EF 是否支持某种类型的“预取路径”或者这是否需要一些高级自定义表达式树......等等?