AutoMapper - 奉承/ Unflattening列出

问题描述 投票:2回答:2

我想打平我的实体框架模型数据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在我的实体列表?

c# asp.net-core automapper
2个回答
0
投票

如果您使用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缺省配置下处理它


0
投票

我落得这样做,通过代码,这样我就可以清楚地探测和确定添加,删除和更新操作。所以我使用AutoMapper只有一个办法:实体 - > DTO。

© www.soinside.com 2019 - 2024. All rights reserved.