优化EF查询:与Include
的过滤相关实体
>本文解决了在实体框架(EF)查询中使用AWhere
子句有效检索相关实体的挑战。 目的是避免多次数据库旅行。
>
场景涉及两个实体:Bus
>和Person
,Bus
具有Person
的集合导航属性。目的是要检索所有驾驶的公共汽车,只有那些醒着的乘客。
>常见的效率低下方法导致多个数据库调用。 一个更有效的解决方案涉及在查询中使用过滤的
子句,禁用懒惰的加载和显式加载相关的实体。Where
这是一个演示这种方法的示例:
1 2 3 4 5 6 7 8 9 10 | Context.Configuration.LazyLoadingEnabled = false;
var buses = Context.Busses.Where(b => b.IsDriving)
.Select(b => new
{
Bus = b,
AwakePassengers = b.Passengers.Where(p => p.Awake)
})
.AsEnumerable()
.Select(x => x.Bus)
.ToList();
|
登录后复制
此代码首先在单个数据库查询中检索驾驶总线及其清醒乘客。
调用将结果实现在内存中,从而允许EF正确建立关系。 最后,仅选择AsEnumerable()
对象并返回。Bus
>
重要的考虑因素:
这种方法虽然在EF6中有效,但可能需要针对多对多关系和EF核心进行调整。 EF Core提供诸如全球查询过滤器之类的功能,可以为更复杂的方案提供替代解决方案。 有关这些高级技术的详细信息并处理多到多的关系,请参考原始资料。
以上是我如何在EF查询中有效地将与Where子句的相关实体纳入其中?的详细内容。更多信息请关注PHP中文网其他相关文章!