Automapper returns 使用 ProjectTo<> 的空对象

Automapper returns empty objects using ProjectTo<>

我是 Automapper 的新手,正在尝试将 Entity Framework 数据库对象映射到 DTO。

我的数据库对象 OfficeLookup 包含 CodeDescription(以及我不关心的其他属性)。 我的 OfficeDto 包含 IdName 属性。

映射:

private MapperConfiguration OfficeMapperConfiguration =>
    new MapperConfiguration(
        cfg =>
            {
                cfg.CreateMap<OfficeLookup, OfficeDto>()
                    .ForMember(dest => dest.Id, act => act.MapFrom(src => src.Code))
                    .ForMember(dest => dest.Name, act => act.MapFrom(src => src.Description));
            });

还有我的代码:

public IEnumerable<OfficeDto> GetOfficeDtos() => OfficeLookup.ProjectTo<OfficeDto>(OfficeMapperConfiguration); // returns an Ienumerable of empty OfficeDTOs

奇怪的是,我有另一个更复杂的映射,用于不同的 table,效果很好。我不明白为什么这张地图没有。

我映射生成的表达式是

ObjectQuery<OfficeLookup>.MergeAs(MergeOption.AppendOnly).Select(dtoOfficeLookup => new OfficeDto())

这看起来不对。另一个映射生成一个正确设置各种属性的表达式(Office 值除外。我假设一旦我可以获得这个独立映射,我将能够修复嵌套映射)。

问题应该在相应的 OfficeDto 属性中,更具体地说,缺少 属性 setter,在这种情况下,AutoMapper 会简单地将它们从投影中跳过,即使它们已经被投影明确映射。

例如使用以下内容重现该问题 class:

class OfficeDto
{
    public int Id { get; }
    public string Name { get; }
}

并添加 属性 setters(甚至是私有的)修复它:

class OfficeDto
{
    public int Id { get; private set; }
    public string Name { get; set; }
}