我正在尝试为项目学习LINQ。但我对Include方法感到有些困惑。它是干什么用的?相册变量的以下两个初始化之间有什么区别?
var album = storeDB.Albums.Include("Artist").ToList();
var album = storeDB.Albums.ToList();
答案 0 :(得分:7)
Include是一种扩展方法,由EF用于启用您实体的Eager Loading。
在第一种情况下,通过指定Include("Artist")
,当您从Album
集中检索Albums
个实体时,您指示LINQ
也检索相关的Artist
实体(通常关联是通过数据库中的外键,尽管您也可以在模型中关联)。
在第二种情况下,在获取相册时,您不会浏览任何相关实体。
请注意,从Entity Framework 4.1及其后开始,有一种使用Include的首选机制,它采用lambda,因此字符串关联变为强类型,即:
var album = storeDB.Albums.Include(alb => alb.Artist).ToList();
请记住在使用lambda扩展名时导入System.Data.Entity
。
答案 1 :(得分:0)
这两个语句用于不同的目的,第一个是使用Eager加载,即一次加载属于您实体的所有对象(而不是稍后再进行另一个查询),
第二个给你结果,所以你可以把它保存在一个可容许的迭代器而不是IQueryable对象,这是Linq的更常见的类型