Automapper复杂映射

5
我怎样映射以下内容:
public abstract class PersonBase
{
   public Address Address { get; set; }         
}

public class Address
{
  public string AddressHome { get; set; }
  public int PostalNumber { get; set; }
}

public class PersonEditVM : PersonBase
{ 
   public int PersonId { get; set; }
}

public PersonEntity
{
  public int PersonId { get; set; }
  public string AddressHome { get; set; }
  public int PostalNumber { get; set; }
}

我希望将 PersonEntity 映射到 PersonEditVM 中。
编辑:在喝了一杯咖啡后解决了问题,但如果有更简洁的解决方案会更好。
Mapper.CreateMap<PersonEntity, PersonEditVM >()                
                .ForMember(d=>d.Address, s=>s.MapFrom(p=> new Address{
                    AddressHome = p.AddressHome,
                    PostalNumber = p.PostalNumber
                    }));

2
已解决,但我想知道是否有更简洁的解决方案? - Matija Grcic
1个回答

5
这是一种方法,可以将您的 Adress (正确拼写应为 Address )映射拆分为另一个 CreateMap 调用:
Mapper.CreateMap<PersonEntity, PersonEditVM>()
    .ForMember(dest => dest.Adress, opt => opt.MapFrom(src => src));

Mapper.CreateMap<PersonEntity, Adress>()
    .ForMember(dest => dest.AdressHome, opt => opt.MapFrom(src => src.AdressHome))
    .ForMember(dest => dest.PostalNumber, opt => opt.MapFrom(src => src.PostalNumber));

1
@plurby:你说的“还是一样”是什么意思?更好的解决方案应该是什么样子? - Andrew Whitaker
我并不是说它不干净,只是希望如果可能的话有一个更干净的解决方案,我不需要指定每个属性。 - Matija Grcic
1
@plurby:我明白了,我认为如果没有自定义解析器,你不能在一行代码中完成它,但希望有人能证明我错了 :)。你可以删除映射到“地址”的“ForMember”调用。 - Andrew Whitaker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接