使用LINQ的意义包括加载其他表格时



我注意到,在使用MVC中使用读/写操作视图模板时,基于与其他表(或本身无关紧要)保持关系的模型创建控制器时,它会自动使用类似的方式实现索引操作:

        public ActionResult Index()
    {
        var table1 = db.Table1.Include(l => l.Parent).Include(l => l.Table2);
        return View(table1.ToList());
    }

我认为使用它,以便当索引加载时,视图将包括所有模型字段(当然不包括ID)以及诸如父级或table2之类的外国字段,这似乎是最有意义的。<<<<<<<<<<<<<<<</p>

但是,我删除了包括这样的零件:

        public ActionResult Index()
    {
        var table1 = db.Table1;
        return View(table1.ToList());
    }

和索引仍然加载了外国字段(父和表2),好像根本不需要includer子句。

我的问题是,在这种特定情况下(MVC加载模板加载)以及总体上使用?

,使用什么意义

如果您使用的是 entity Framework Include()告诉EF,这些关系应包括在查询中,以便生成适当的加入。这意味着从ParentTable2的字段将包含在服务器的单个圆形trip 的结果中。(这也称为急切加载

但是,如果您删除了Include()语句,则EF最初只会从Table加载字段。但是,它具有 lazy-Loading 默认启用,因此当您尝试访问它们时,从数据库中检索了ParentTable2的字段。然而

您可以在EF MSDN网站的本条目中找到有关可加载相关实体的选项的更多信息。

因此,如果您的索引视图使用3表中的字段,则Include()方法将需要一个往返(带有较重的查询),而懒惰的方法将需要3个圆形往返。

作为基本的经验法则,当您确定需要这些字段时,可以使用Include()。仅在某些情况下您需要这些字段时,请使用懒惰加载。在任何情况下,请确保您查看本EF绩效指南的第8节,它很好地解释了选项及其含义,因此您可以为您的需求选择最佳的选项。

希望它有帮助!

最新更新