【发布时间】:2018-08-21 10:03:46
【问题描述】:
Person 类包含许多嵌套对象。当我尝试使用 automapper 将此“Person”类映射到 PersonDTO 时,如果我没有像这样指定每个属性,它将不会映射嵌套对象的值:
CreateMap<Person, PersonDto>()
.ForMember(dest => dest.Mobilenumber, opt => opt.MapFrom(src => src.ContactInfo.Mobilenumber))
.ForMember(dest => dest.Companyname, opt => opt.MapFrom(src => src.Company.Companyname)).ReverseMap();
Automapper 不应该只从下面的映射中感知到这一点并将对象展平吗?
CreateMap<ContactInfo, ContactInfoDto>().ReverseMap();
public class Person : EntityBase
{
public Person()
{
this.CreationTimeUTC = DateTime.UtcNow;
this.UpdateTimeUTC = DateTime.UtcNow;
}
public int PersonId {get; private set;}
public string Firstname { get; set; }
public string Lastname { get; set; }
public string Email {get; set;}
public DateTime CreationTimeUTC { get; private set; }
public DateTime UpdateTimeUTC { get; set; }
//ContactGroup many-many
public ICollection<ContactGroup> ContactGroups { get; } = new List<ContactGroup>();
//Contact-FK
public ContactInfo ContactInfo {get; set;}
//Company-FK
public int CompanyId {get; set;}
public Company Company {get; set;}
public override string ToString()
{
return Firstname + " " + Lastname;
}
}
public class ContactInfo : EntityBase
{
public ContactInfo()
{
this.CreationTimeUTC = DateTime.UtcNow;
this.UpdateTimeUTC = DateTime.UtcNow;
}
public int ContactInfoId {get; private set;}
public DateTime CreationTimeUTC { get; private set; }
public DateTime UpdateTimeUTC { get; set; }
public string Mobilenumber { get; set; }
//Person-FK
public int PersonId {get; set;}
public Person Person {get; set;}
public override string ToString()
{
return Mobilenumber;
}
}
【问题讨论】:
-
为什么要这样?你当然可以实现它,但是你必须考虑要深入多少层,如果找到多个选项该怎么办,如果你不想从子对象映射怎么办,等等。你'正在做许多人所做的事情,并假设应该发生某些事情,因为它在一种特定情况下很方便。它并不像您想象的那么方便。
标签: c# asp.net asp.net-core .net-core automapper