当前位置: 首页 > 知识库问答 >
问题:

EntitiesToToTos(实体框架DTO生成器)是否支持延迟加载?

禄仲渊
2023-03-14

我在亲子关系中有几个实体:家庭(父母)和更新(孩子)。我想阅读没有相应更新的家庭列表。只有17个家庭,但大约有60,000个更新,所以我真的不想要更新。

我使用EntiesToDTO从Family实体生成DTO,并创建一个汇编器来将Family实体转换为FamilyDTO。汇编器的ToDTO方法如下所示:

public static FamilyDTO ToDTO(this Family entity)
{
    if (entity == null) return null;

    var dto = new FamilyDTO();

    dto.FamilyCode = entity.FamilyCode;
    dto.FamilyName = entity.FamilyName;
    dto.CreateDatetime = entity.CreateDatetime;
    dto.Updates_ID = entity.Updates.Select(p => p.ID).ToList();

    entity.OnDTO(dto);

    return dto;
}

当我运行汇编程序时,我发现每个生成的FamilyDTO都填充了Updates\u ID列表,尽管对于EF模型(edmx文件),延迟加载设置为true。是否可以配置EntitiesToToTos以支持子元素的延迟加载,或者它是否总是使用即时加载?我在EntitiesToTos中看不到任何可以设置为在生成汇编程序时支持延迟加载的选项。

顺便说一句,我是一个更大团队的一员,该团队几乎每天都使用EntitiesToToTos重新生成汇编程序,因此如果可能的话,我宁愿不要手动修改汇编程序。

共有2个答案

司寇灵均
2023-03-14

根据您在此处发布的代码,以及我认为有人会如何实现这样的解决方案(即将记录转换为DTO格式),我认为您别无选择,只能进行快速加载。

一些关键点:

1) 您的Updates\u ID字段显然是一个列表,这意味着它正在立即水合集合(ToList始终执行。只有常规的IEnumerable使用延迟执行)。

2) 如果您在DTO中粘贴任何类型的导航属性,它将自动加载。这是因为一旦您触摸到实体框架带回的导航属性,框架就会自动从数据库中加载它,而不管您想要的只是用它填充DTO。

扶隐水
2023-03-14

我是Fabian,EntitiesToToTos的创始人。

首先,非常感谢您使用它。

事实上,我不希望汇编器这样做,我希望开发人员仅在需要时使用部分方法OnDTO和OnEntity映射导航属性。否则你会遇到像你一样的问题。

似乎我从来没有遇到过这个问题,使用该工具,非常感谢。

<罢工>

 类似资料:
  • 考虑以下(非常简化的)实体: 在我的映射器中,我可以设置用户罚款,但是一旦执行以下代码(在数据库中保留任何更改之前)

  • 1、mybatis 是否支持延迟加载? 延迟加载其实就是讲数据加载时机推迟,比如推迟嵌套查询的时机。 延迟加载可以实现先查询主表,按需实时做关联查询,返回关联表结果集,一定程度上提高了效率。 mybatis仅支持关联对象association和关联集合对象collection的延迟加载,association是一对一,collection是一对多查询,在mybatis配置文件中可以配置lazylo

  • 我从这个网站上读到了关于懒惰加载的内容。启用或禁用LazyLoding “如果我们请求已启用LazyLoading的学生列表,数据提供程序将从数据库中获取所有学生,但每个StudentAddress属性在显式访问该属性之前不会加载。” 此语句表示,当我将设置为true时,将不会加载相关数据。然而 如果我设置延迟加载启用=true,上面的代码返回所有特技与他们的老师和地址。我在这里错过了什么?有人能

  • 当将实体模型转换为DTO时,我对Entity Framework Core(v2.0.1)有一个问题。基本上,通过该短语的任何其他版本,当我不想加载时,它是延迟加载的。这是一个简单的。NET Core Console应用程序(带有Microsoft. EntityFrameworkCore. SqlServer(2.0.1)包)。 现在,当执行方法来检索数据时,它正在执行以下SQL 如您所见,它没

  • 我听说应该在web应用程序中禁用EF的延迟加载功能。(ASP.NET)。首先,这里和这里。 现在我真的很困惑,因为我一直认为应该始终启用延迟加载,因为它可以防止从数据库中获取不必要的数据。所以,现在我的问题是:从性能角度来看,在网络应用中禁用懒惰加载是否是一个更好的主意。如果是,你能解释一下原因吗?

  • 本文向大家介绍Mybatis 是否支持延迟加载?如果支持,它的实现原理是什么?相关面试题,主要包含被问及Mybatis 是否支持延迟加载?如果支持,它的实现原理是什么?时的应答技巧和注意事项,需要的朋友参考一下 Mybatis 仅支持 association 关联对象和 collection 关联集合对象的延迟加 载,association 指的就是一对一,collection 指的就是一对多查询