5

我正在使用 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 可查询扩展不支持“条件或映射后”等所有功能。有什么解决方法吗?

4

1 回答 1

6

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

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

然后在运行时:

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

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

于 2015-08-03T16:18:34.537 回答