实体框架中的延迟加载是加载和访问相关实体时发生的默认现象.然而,急切加载是指强制加载所有这些关系的做法.我遇到的问题是,在什么情况下,急切加载可能比延迟加载更有益.问这个,因为很明显延迟加载更加资源友好,即使我们使用这个ToList()方法,我们仍然可以利用延迟加载行为.但是,我认为可能延迟加载会增加对实际数据库的请求数量,这也许是开发人员使用该Inlcude方法强制加载所有关系的原因.例如,在MVC 5中使用Visual Studio自动搭建时,在控制器中自动创建的Index方法总是使用Eager Loading,而且我总是有一个问题,即在这种情况下Microsoft默认使用Eager Loading.
如果有人向我解释,在什么情况下,渴望加载比延迟加载更有益,我会很感激,为什么我们一直使用它,同时有更多的资源友好作为延迟加载.
我创建了一个团队web api控制器,并尝试调用GET方法来获取数据库中所有团队的json结果.但是当我打电话时,我只让第一支队伍回到了json,但是当我在return语句上设置一个断点时,它拥有所有254支球队以及所有比赛.
这些是我正在处理的两个模型:
public class Team
{
public string Id { get; set; }
public string Name { get; set; }
public string Icon { get; set; }
public string Mascot { get; set; }
public string Conference { get; set; }
public int NationalRank { get; set; }
public List<Game> Games { get; set; }
}
public class Game
{
public string Id { get; set; }
public string Opponent { get; set; }
public string OpponentLogo { get; …Run Code Online (Sandbox Code Playgroud) 考虑遵循LINQ查询:
var item = (from obj in _db.SampleEntity.Include(s => s.NavProp1)
select new
{
ItemProp1 = obj,
ItemProp2 = obj.NavProp2.Any(n => n.Active)
}).SingleOrDefault();
Run Code Online (Sandbox Code Playgroud)
这按预期运行,但item.ItemProp1.NavProp1为NULL.正如它在这里解释的那样,这是因为查询在使用后实际发生了变化Include().但问题是这种情况的解决方案是什么?
当我像这样更改查询时,每件事都可以正常工作:
var item = (from obj in _db.SampleEntity.Include(s => s.NavProp1)
select obj).SingleOrDefault();
Run Code Online (Sandbox Code Playgroud)
关于这篇文章,我想问题是什么......但作者提供的解决方案不适用于我的情况(因为在最终选择中使用匿名类型而不是实体类型).