首页 >后端开发 >C++ >如何用实体框架中的Where子句热切地加载相关的实体?

如何用实体框架中的Where子句热切地加载相关的实体?

Susan Sarandon
Susan Sarandon原创
2025-02-01 13:46:08968浏览

How to Eagerly Load Related Entities with a Where Clause in Entity Framework?

在实体框架中使用过滤有效地加载相关数据

>

>本文在实体框架内应用过滤条件时,应对热切加载相关实体的挑战。 最佳方法取决于您的EF版本。>

实体框架6解决方案

>
    > ef6依赖于急切的加载和关系修复。 但是,这种修复机制并不总是能够与多一关系的关系正常运行。 解决方法涉及:
  1. >

    >禁用懒惰加载:
    <code class="language-csharp">Context.Configuration.LazyLoadingEnabled = false;</code>
    防止懒惰加载以确保在单个查询中检索所有数据:
  2. >

    >带过滤的投影:
    <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>
    >在查询期间使用投影对相关实体进行过滤:
  3. Passengers>自动关系修复:Busef将自动填充每个

    对象的属性
  4. ,仅使用清醒的乘客。
  5. >数据传输对象(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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn