可以告诉自动映射器在运行时忽略映射吗?

我正在使用Entity Framework 6和Automapper将实体映射到dto.

我有这个模特

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; }
}

我使用automapper Queryable Extension从实体映射dto.

var personDto = dbContext.People.Project().To<PersonDto>();

上述方法的问题在于,它将使EF始终加载地址实体.我希望仅在我使用include(x => x.Address)明确告知它们时才加载地址.如果我在automapper映射中指定ignore(),则不会加载该地址.是否可以告诉automapper在运行时忽略address属性?我正在使用的自动映射器可查询扩展不支持“条件或映射后”之类的所有功能.有什么解决方法吗?

解决方法:

您需要为DTO启用显式扩展.首先配置:

Mapper.CreateMap<Person, PersonDto>()
    .ForMember(d => d.Address, opt => opt.ExplicitExpansion());

然后在运行时:

dbContext.People.Project.To<PersonDto>(membersToExpand: d => d.Address);

“ membersToExpand”可以是目标成员的表达式列表,也可以是表示要扩展的属性名称的字符串值的字典.

上一篇:c#-仅使用Automapper映射特定类型


下一篇:c#-将平面JSON /字典映射到模型(包含子类)