了解引擎盖下的EF.包括vs加入

Ana*_*uza 5 c# performance entity-framework

我正在使用实体框架一段时间,但仍然有一些"黑洞",它是如何在幕后工作.即使在阅读了几篇文章后,我也不确定我的理解是否正确.


让我们从问题开始:

  • EF Include如何在引擎盖下工作?
  • Join和Include之间有什么区别?
  • Include的性能问题(延迟加载与急切加载,生成的SQL查询等)?
  • 当我应该使用Join而不是Include,反之亦然?

Mat*_*sca 10

通过linq或lambda表达式查询EF时,如果底层模式不提供FK,则只需要连接语句,因此您没有对象的导航属性.

另一方面,include(急切加载)和延迟加载只有在有FK时才有效,因为它使用导航属性.

两种情况下的底层sql都将使用连接(因为sql没有"导航属性"概念).

至于表现,取决于具体情况.延迟加载与Eager加载(因此在FK场景中)可能是一个困难的选择.

我通常使用延迟加载,当你有一个很大的主要结果时很有用,但是你只需要"加入"整个结果集的几个项目的数据.

如果您事先知道您需要整个结果集的连接数据,那么急切加载可能会提高性能.我建议你自己试验一下.