在实体框架中使用过滤有效地加载相关数据
>
>本文在实体框架内应用过滤条件时,应对热切加载相关实体的挑战。 最佳方法取决于您的EF版本。>
实体框架6解决方案>>
>禁用懒惰加载:<code class="language-csharp">Context.Configuration.LazyLoadingEnabled = false;</code>防止懒惰加载以确保在单个查询中检索所有数据:
>
>带过滤的投影:<code class="language-csharp">var buses = Context.Busses .Where(b => b.IsDriving) .Select(x => new { b, Passengers = x.Passengers.Where(p => p.Awake) }) .AsEnumerable() .Select(x => x.b) .ToList();</code>>在查询期间使用投影对相关实体进行过滤:
Passengers
>自动关系修复:Bus
ef将自动填充每个
>数据传输对象(DTOS):
使用诸如AutomApper之类的映射工具将检索到的数据转换为DTO,以进行最佳数据传输。实体框架核心(5.0及以后)解决方案
> EF Core 5.0及更高版本直接支持嵌套的版本包含条款,简化了该过程:
<code class="language-csharp">var buses = Context.Busses .Include(bus => bus.Passengers.Where(p => p.Awake)) .ToList();</code>替代方法:第三方库
> >
的库提供了一种更简化的方法,用于管理适用于包含集合的全局过滤器。 这可以增强复杂场景的代码可读性和可维护性。
EntityFramework.DynamicFilters
>在实体框架中,急切地加载相关数据的最佳方法是在所使用的版本中取决于。 EF Core 5.0提供了简单的解决方案。 对于EF6,必须进行涉及禁用懒惰加载和使用预测的解决方法。 第三方库为改进的代码组织和灵活性提供了替代方案。
以上是如何用实体框架中的Where子句热切地加载相关的实体?的详细内容。更多信息请关注PHP中文网其他相关文章!