gpt4 book ai didi

c# - EntityFramework 确定子集合是否包含项目而不获取整个集合

转载 作者:行者123 更新时间:2023-11-30 20:40:30 26 4
gpt4 key购买 nike

我有一个定义了主从关系的 Entity Framework 对象。详细信息对象集合有一个导航属性。

在稍后的代码中,我尝试使用 AutoMapper 将其中一个主对象映射到数据传输对象。但是,数据传输对象需要一个 bool 属性来指定记录是否有任何详细记录。

map 试图通过执行以下操作来填充此 bool 值:

Mapper.CreateMap<Master, MasterDto>()
.ForMember(dest => dest.HasDetails, src => src.Details.Any())

这在大多数情况下都有效,但我有一个包含超过 200,000 条详细记录的主记录,当它开始执行此映射时,它试图在运行 .Any() 之前将所有这些记录从数据库中取出找出集合中包含的任何内容。这花费的时间足以使 ASP.NET 连接超时。

有什么方法可以查询 .Details 集合是否包含一个值,而无需首先获取所有详细信息行?

最佳答案

当使用延迟加载时,Any(以及其他扩展如 Count)加载整个集合。你无法避免它。要么使用一些中间类型来选择结果,并将该类型的实例映射到 DTO,要么直接选择 DTO:

context
.Masters
.Select(_ => new MasterDto
{
// ...
HasDetails = _.Details.Any()
});

关于c# - EntityFramework 确定子集合是否包含项目而不获取整个集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33346167/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com