【问题标题】:What is the role of the Include methodInclude方法的作用是什么
【发布时间】:2012-11-24 02:21:02
【问题描述】:

我正在尝试为一个项目学习 LINQ。但是我对 Include 方法有点困惑。它是干什么用的?以下两次初始化专辑变量有什么区别?

var album = storeDB.Albums.Include("Artist").ToList();
var album = storeDB.Albums.ToList();

【问题讨论】:

    标签: c# linq-to-entities


    【解决方案1】:

    Include 是一种扩展方法,EF 使用它来启用实体的Eager Loading

    在第一种情况下,通过指定Include("Artist"),当您从Albums 集合中检索Album 实体时,您将指示LINQ 也检索关联的Artist 实体(通常关联是通过外键在数据库中,尽管您也可以在模型中关联)。

    在第二种情况下,当获取相册时,您没有拉过任何相关实体。

    请注意,从 Entity Framework 4.1 及更高版本开始,有一种使用 Include 的首选机制,它采用 lambda,因此字符串关联变为强类型,即:

    var album = storeDB.Albums.Include(alb => alb.Artist).ToList();
    

    请记住在使用 lambda 扩展时导入 System.Data.Entity

    【讨论】:

    • 那么在第二种情况下,如果我尝试访问艺术家信息,将会有另一个数据库查找,而在第一种情况下不会有数据库查找?
    • @ankit0311 如果您启用了延迟加载,那么是的,将进行第二次调用以“及时”获取艺术家信息(如果您没有,Album.Artist 将为空)。
    【解决方案2】:

    这两个语句的用途不同,第一个是使用Eager loading,即一次加载所有属于你的实体的对象(而不是稍后再进行查询),

    第二个给你结果,所以你可以把它保存在一个可枚举的迭代器中,而不是 IQueryable 对象,这是更常见的 Linq 类型

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-27
      • 1970-01-01
      • 2012-12-06
      • 1970-01-01
      • 2011-06-11
      • 1970-01-01
      • 2021-01-29
      • 1970-01-01
      相关资源
      最近更新 更多