了解EF的底层.包括vs连接

本文关键字:包括 vs 连接 EF 了解 | 更新日期: 2023-09-27 18:17:58

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


让我们从问题开始:

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

了解EF的底层.包括vs连接

当通过linq或lambda表达式查询EF时,只有在底层模式不提供fk时才需要连接语句,因此在对象上没有导航属性。

另一方面,include(急切加载)和延迟加载只能在有fk的情况下工作,因为它使用了导航属性。

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

至于性能,这取决于具体情况。延迟加载vs即时加载(所以在FK场景中)可能是一个困难的选择。

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

如果您提前知道您将需要整个结果集的连接数据,那么迫切加载可能会更好地提高性能。我建议你自己试试。