【问题标题】:Difference between Include in EF and Join in SQLEF中的Include和SQL中的Join的区别
【发布时间】:2015-07-09 07:53:36
【问题描述】:

当我与我的同事交谈时,我有些分心,他说在 EF 中包含和在 SQL 中加入是不同的事情。你能解释一下这是真的吗?如果是,请说明有什么区别?

谢谢。

【问题讨论】:

  • Include 本身不是 SQL 连接;它是一个函数,它接受一个字符串,指定应该从数据库中加载哪些相关对象。然后,实体框架使用一个或多个连接来生成完整的对象图。这些可能是内部或外部、左或右连接,具体取决于对象的关系。
  • 您可以使用ToTraceString msdn.microsoft.com/en-us/library/… 来检查查询并查看它在SQL 中的执行方式。在某些情况下,可以通过指定您自己的连接语句来制定更有效的查询。

标签: c# sql .net entity-framework


【解决方案1】:

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

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

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

至于性能,这取决于情况。延迟加载与急切加载(因此在 FK 场景中)可能是一个艰难的选择。

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

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

取自Understanding EF. Include vs Joins

【讨论】:

    猜你喜欢
    • 2013-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-07
    相关资源
    最近更新 更多