【问题标题】:What is the difference between load and include in sql querysql查询中加载和包含有什么区别
【发布时间】:2016-11-18 16:23:09
【问题描述】:

我有一个看起来像这样的查询

         var query = db.Customer
            .Include(c => c.Address)
            .Where(c => c.Address.Id > 10)
            .ToList();

当我这样做时

        var query = db.Customer
            .Where(c => c.Address.Id > 10)
            .ToList();

        db.Address
            .Where(a => a.Id > 10)
            .Load();

据我所见,我得到了相同的结果。

我的问题是:这两个查询返回的内容有什么区别吗?其中一个比另一个更受欢迎?

【问题讨论】:

  • 您是否尝试过搜索重复的“加载与包含”?有很多,例如here.
  • 我做到了,但显然不够好。但是这种情况略有不同,因为我在加载之前在第一个查询中使用了地址,我想知道这是否会导致任何问题,或者两种方法的结果总是相同的。

标签: c# entity-framework linq-to-sql


【解决方案1】:
var query = db.Customer
                .Include(c => c.Address)
                .Where(c => c.Address.Id > 10)
                .ToList();

在上述查询中,它使用单个数据库行程将所有相关数据带到哪里。

 var query = db.Customer
                .Where(c => c.Address.Id > 10)
                .ToList();

            db.Address
                .Where(a => a.Id > 10)
                .Load();

这里它使用 2 次数据库行程来获取数据。

Load :

在多种情况下,您可能希望从中加载实体 数据库进入上下文而不立即做任何事情 那些实体。一个很好的例子是为数据加载实体 本地数据中描述的绑定。一种常见的方法是 编写一个 LINQ 查询,然后在其上调用 ToList,仅立即 丢弃创建的列表。 Load 扩展方法的工作原理就像 ToList 只是它完全避免了创建列表。

注意:我们不能说哪个更好。大多数时候我们使用急切加载方法(Include)。它很好而且简单。但有时它很慢。所以你需要根据您的数据大小等决定使用哪一个。

【讨论】:

  • 那么两个查询都带回了完全相同的数据?我的代码与此稍有不同,当我查看 SQL Server Profiler 时,第一个查询的读取量比第二个查询多一点,这是否很好地表明了我应该使用哪个查询?你还说include方法是急切加载,load方法也有名字吗?
  • 哪个快?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-02-09
  • 2011-10-16
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多