我正在使用 Entity Framework 6 和 Automapper 将实体映射到 dtos。
我有这个型号
public class PersonDto
{
public int Id { get; set; }
public string Name { get; set; }
public AddressDto Address { get; set; }
}
public class AddressDto
{
public int Id { get; set; }
public string Street { get; set; }
public string City { get; set; }
}
我使用自动映射器可查询扩展 https://github.com/AutoMapper/AutoMapper/wiki/Queryable-Extensions从实体映射 dto。
var personDto = dbContext.People.Project().To<PersonDto>();
上述方法的问题在于,它会使 EF 始终加载地址实体。我希望仅当我使用 include(x => x.Address) 明确告诉他们时才加载地址。如果我在自动映射器映射中指定ignore(),则不会加载地址。是否可以告诉自动映射器在运行时忽略地址属性?我正在使用的自动映射器可查询扩展不支持“条件或映射后”等所有功能。有什么解决方法吗?
您需要为 DTO 启用显式扩展。首先在您的配置中:
Mapper.CreateMap<Person, PersonDto>()
.ForMember(d => d.Address, opt => opt.ExplicitExpansion());
然后在运行时:
dbContext.People.Project.To<PersonDto>(membersToExpand: d => d.Address);
“membersToExpand”可以是目标成员的表达式列表,也可以是表示要扩展的属性名称的字符串值的字典。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)