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

C# EntitiesToToToS(实体框架DTO生成器)是否支持延迟加载?,c#,entity-framework,code-generation,add-in,dto,C#,Entity Framework,Code Generation,Add In,Dto,我在父子关系中有两个实体:家庭(父)和更新(子)。我想阅读没有相应更新的族列表。只有17个家庭,但大约60000个更新,所以我真的不想更新 我曾经从族实体生成DTO,并创建用于将族实体转换为FamilyDTO的汇编器。汇编程序的ToDTO方法如下所示: public static FamilyDTO ToDTO(this Family entity) { if (entity == null) return null; var dto = new FamilyDTO();

我在父子关系中有两个实体:家庭(父)和更新(子)。我想阅读没有相应更新的族列表。只有17个家庭,但大约60000个更新,所以我真的不想更新

我曾经从族实体生成DTO,并创建用于将族实体转换为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;
}
运行汇编程序时,我发现每个生成的FamilyTo都填充了更新ID列表,尽管EF模型(edmx文件)的延迟加载设置为true。是否可以将EntitiesToToTos配置为支持子元素的延迟加载,或者它是否始终使用即时加载?在EntitiesToToTos中,我看不到任何可以设置为在生成汇编程序时支持延迟加载的选项


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

基于您在这里发布的代码,以及我认为有人会如何实现这样的解决方案(即将记录转换为DTO格式)我想你别无选择,只能迫不及待地装填

一些要点:

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


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

我是Fabian,的创建者

首先,非常感谢您使用它

您检测到的实际上是我不希望汇编程序执行的操作,我希望开发人员仅在需要时使用分部方法OnDTOOnEntity映射导航属性。否则你会遇到像你一样的问题

看来我在使用这个工具时从来没有遇到过这个问题,非常感谢


所以现在我正在解决这个问题。现在已经修好了。

啊,我也这么怀疑。谢谢你的确认。同时也感谢您提供有关ToList始终执行和导航属性的信息。将记住这一点,以备将来使用(正如您所知,我是实体框架的新手)。嗨,Simon,检查我的答案,它现在已修复,如果您在上收到通知,下次打开它时,您也会收到该工具的通知。谢谢只是想澄清一下:只有通过键使用DTOs关联才能遇到这个问题。太棒了,谢谢Fabian。我使用SQL Server Profiler验证了Entities ToToTos v3.0是否存在问题(即它正在处理60000个子记录)。升级到v3.1,不再浏览子记录。非常出色的客户服务!嗨,Fabian,你什么时候发布你伟大项目的VS.NET 2k13新版本?非常感谢。