【问题标题】:How do i map nested objects我如何映射嵌套对象
【发布时间】:2016-07-09 18:56:38
【问题描述】:
public class SecurityAccess : IdentityUser    {
    public string LName { get; set; }
    public string FName { get; set; }
    public string MName { get; set; }
    public DateTime NameDate { get; set; }
    public DateTime DOB { get; set; }
    public string Spouse { get; set; }
    public string Comments { get; set; }
    public Address Address { get; set; }       
}

public class Address {
    public int Id { get; set; }
    public int OwnerId { get; set; }
    public DateTime CreationDate { get; set; }
    public Company Company { get; set; }
    public string Department { get; set; }
    public string Title { get; set; }
    public string Location{ get; set; }
    public string City { get; set; }
    public string State { get; set; }
    public string Zip { get; set; }
    public string Country { get; set; }
    public string Salutation { get; set; }
    public bool Active { get; set; }         
}

public class Company {
    public int Id { get; set; }
    public string Name { get; set; }        
    public DateTime CompanyDate { get; set; }    
}

public class ContactRegisterViewModel {
        public byte Id { get; set; }
        public String FName { get; set; }
        public String LName { get; set; }
        public String CompanyName { get; set; }
        public String AddressesTitle { get; set; }
        public String AddressesLocation { get; set; }
        public String AddressesCity { get; set; }
        public String AddressesState { get; set; }
        public String AddressesZip { get; set; }
        public String AddressesCountry { get; set; }
        public String AddressesPhone { get; set; }
        public String AddressesEmail { get; set; }
}

我在 Automapper 中设置了以下映射

CreateMap<ContactRegisterViewModel, SecurityAccess>()
            .ForMember(dest => dest.Address,
                       opts => opts.MapFrom(
                            src => new Address
                            {
                                Address1 = src.AddressesAddress1,
                                Title = src.AddressesTitle,
                                City = src.AddressesCity,
                                State = src.AddressesState,
                                Zip = src.AddressesState,
                                Country = src.AddressesCountry,
                                Email = src.AddressesEmail,
                                Phone = src.AddressesPhone,

                            })).ReverseMap();

我正在尝试将 ContactRegisterViewModel 转换为 SecurityAccess。转换部分有效。我能够获得填写在 SecurityAccess 中的相关属性,包括 SecurityAccess 模型中的 Address 属性字段,但是我很惊讶地试图进一步将 ContactRegisterViewModel 属性 CompanyName 映射到 Address.Company.Name 中的属性。

有什么建议可以映射整个对象树吗?

【问题讨论】:

  • 任何帮助,有点急需解决方案?

标签: automapper automapper-5


【解决方案1】:

所以一种可能的解决方案是这样的:

CreateMap<ContactRegisterViewModel, SecurityAccess>()
    .ForMember(d => d.Address, o => o.MapFrom(s => s));

CreateMap<ContactRegisterViewModel, Address>()
    .ForMember(d => d.Title, o => o.MapFrom(s => s.AddressesTitle))
    .ForMember(d => d.Company, o => o.MapFrom(s => s));

CreateMap<ContactRegisterViewModel, Company>()
    .ForMember(d => d.Name, o => o.MapFrom(s => s.CompanyName));

这应该可以完成工作,尽管它可能不是最优雅的。可能值得一试看看那些 ConstructUsing / ConvertUsing 方法(请参阅 here)。

【讨论】:

  • 你是一个救星,谢谢@AlexandruMarculescu,它很完美,就像一个魅力!
  • 如果我扔一个小曲线球并在 SecurityAccess 中创建地址 public IEnumerable&lt;Address&gt; Addresses { get; set; } 并在地址表中创建公司 public IEnumerable&lt;Company&gt; Companies{get; set;} 将如何完成映射?
猜你喜欢
  • 1970-01-01
  • 2020-09-27
  • 2013-08-01
  • 2021-09-30
  • 2017-09-11
  • 1970-01-01
  • 2017-07-20
  • 2018-03-17
  • 2016-12-12
相关资源
最近更新 更多