当我和我的同事说话时,我有些分心,他说包含在EF和加入SQL是不同的事情。你能解释一下是真的吗?如果是的话,解释会有什么区别?
感谢。
答案 0 :(得分:3)
当通过linq或lambda表达式查询EF时,如果底层模式不提供FK,则只需要连接语句,因此您没有对象的导航属性。
另一方面,include(急切加载)和延迟加载只有在有FK时才有效,因为它使用了导航属性。
两种情况下的底层sql都将使用连接(因为sql没有“导航属性”概念)。
至于表现,取决于具体情况。延迟加载与Eager加载(因此在FK场景中)可能是一个困难的选择。
我通常使用延迟加载,当你有一个很大的主结果时很有用,但你需要只加入整个结果集的几个项目的数据。
如果您事先知道您需要整个结果集的连接数据,那么急切加载可能会提高性能。我建议你自己试验看看。