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