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