我想打平我的实体框架模型数据DTO我的ASP.NET核心REST Web服务。
我的实体类(简体)的样子:
public class DeliveryNoteEntity
{
public string VehicleNo { get; set; }
public int NotMapped { get; set; }
public List<DeliveryNoteSignature> Signatures { get; set; }
}
public class DeliveryNoteSignature
{
public string Signature { get; set; }
public SignedByRole SignedBy { get; set; }
}
public enum SignedByRole
{
Driver = 1,
Recipient = 2
}
我的DTO的样子
public class DeliveryNoteDto
{
public int Id { get; set; }
public string VehicleNo { get; set; }
public string DriverSignature { get; set; }
public string RecipientSignature { get; set; }
}
然后,我可以填补我的实体像这样
var sourceEntity = new DeliveryNoteEntity
{
VehicleNo = "VehicleNo20",
Signatures = new List<DeliveryNoteSignature> { new DeliveryNoteSignature { Signature = "Driver Mr. Pitz", SignedBy = SignedByRole.Driver} }
};
并映射到DTO:
Mapper.Initialize(cfg => cfg.CreateMap<DeliveryNoteEntity, DeliveryNoteDto>()
.ForMember(dest => dest.DriverSignature, opt => opt.MapFrom(src => src.Signatures
.Where(x => x.SignedBy == SignedByRole.Driver)
.Select(x => x.Signature)
.FirstOrDefault()))
.ForMember(dest => dest.RecipientSignature, opt => opt.MapFrom(src => src.Signatures
.Where(x => x.SignedBy == SignedByRole.Recipient)
.Select(x => x.Signature)
.FirstOrDefault()))
.ReverseMap()
);
var dto = Mapper.Map<DeliveryNoteDto>(sourceEntity);
所以我的问题是:我该怎么办,从DTO到实体的反向映射,当谈到回到我的服务?因此,通过手我会做这样的事情:
var entityToSave = new DeliveryNoteEntity()
{
VehicleNo = dto.VehicleNo,
Signatures = new List<DeliveryNoteSignature>
{
new DeliveryNoteSignature {SignedBy = SignedByRole.Driver, Signature = dto.DriverSignature},
new DeliveryNoteSignature {SignedBy = SignedByRole.Recipient, Signature = dto.RecipientSignature}
}
};
它有没有办法跟AutoMapper做呢?
编辑:我的真正的问题是我该怎么办从XXXSignature性质的映射在我的DTO在我的实体列表?
如果您使用AutoMapper的命名约定,ReverseMap也为你做。
class CustomerClass
{
public string Name {get; set;}
public string Surname {get;set;}
}
class MainClass
{
public CustomerClass Customer {get; set;}
}
class MainClassDto
{
public string CustomerName {get; set;}
public string CustomerSurname {get; set;}
}
在这个例子中,你不需要做任何配置映射和/或反向映射。 AutoMapper缺省配置下处理它
我落得这样做,通过代码,这样我就可以清楚地探测和确定添加,删除和更新操作。所以我使用AutoMapper只有一个办法:实体 - > DTO。