AutoMapper - льстить / развязывать список - PullRequest
0 голосов
/ 06 февраля 2019

Я хочу сгладить данные модели инфраструктуры сущностей в dto для моей веб-службы ASP.NET Core REST.

Мои классы сущностей (упрощенный) выглядят так:

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
}

My 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?

EDIT : мой реальный вопрос: как я могусделать сопоставление свойств XXXSignature в моем dto списку в моем объекте?

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

Я закончил тем, что делал это по коду, чтобы я мог четко определять и определять операции добавления, удаления и обновления.Поэтому я использую AutoMapper только одним способом: entity -> dto.

0 голосов
/ 06 февраля 2019

Если вы используете соглашение об именовании 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 обрабатывает его с конфигурацией по умолчанию

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...