【问题标题】:Automapper complex mappingAutomapper 复杂映射
【发布时间】:2012-04-19 00:12:51
【问题描述】:

如何映射以下内容:

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

【问题讨论】:

  • 已解决,但我对这个问题是否有更清洁的解决方案感兴趣?

标签: mapping automapper


【解决方案1】:

这是一种方法,它将您的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));

【讨论】:

  • @plurby:“还是一样”是什么意思?更清洁的解决方案是什么样的?
  • 我并不是说它不干净,只是我希望有一个更清洁的解决方案,如果可能的话,我不需要指定每个属性。
  • @plurby:我明白了,如果没有自定义解析器,我认为您无法在一行中完成它,但希望有人会出现并证明我错了:)。您可以删除用于映射到 Adress 的 ForMember 调用
猜你喜欢
  • 1970-01-01
  • 2016-08-04
  • 2012-10-16
  • 2020-04-03
  • 2019-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多