3

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

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

2 回答 2

7

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 扩展时导入。

于 2012-11-23T09:15:32.040 回答
0

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

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

于 2012-11-23T09:18:50.960 回答