是否有可能告诉automapper在运行时忽略映射?

时间:2015-07-31 17:05:20

标签: c# automapper automapper-3

我正在使用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; }
}

我使用automapper Queryable Extension来映射来自实体的dto。

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

上述方法的问题在于它会使EF始终加载地址实体。我希望只有在我明确告诉他们使用include(x =&gt; x.Address)时才加载地址。如果我在automapper map中指定ignore(),则不会加载地址。是否有可能告诉automapper在运行时忽略address属性?我正在使用的Automapper可查询扩展不支持“条件或映射后”等所有功能。有没有解决方法呢?

1 个答案:

答案 0 :(得分:4)

您需要为DTO启用显式扩展。首先在您的配置中:

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

然后在运行时:

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

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