Как мне отобразить вложенные объекты
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, включая поле свойства Address, которое находится в модели SecurityAccess, однако я поражен, пытаясь сопоставить свойство ContactRegisterViewModel CompanyName со свойством в Address.Company.Name.
Любые предложения, как я могу отобразить все дерево объектов?
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
методы (см. здесь).