AutoMapper - отображение списка в HashSet - PullRequest
0 голосов
/ 30 мая 2018

Я хочу сопоставить мой DTO с сущностью.Единственное различие между ними заключается в том, что мой dto использует List как тип коллекции, а сущности используют HashSet.Как настроить Automapper для автоматического сопоставления с HashSet при обнаружении ICollection?В настоящее время он просто заменяет хэш-набор в сущности списком.

Примеры классов и отображение:

cfg.CreateMap<MachineDto, Machine>(MemberList.Source)
cfg.CreateMap<Machine, MachineDto>(MemberList.Destination)

public class Machine
{
    public Machine()
    {
        Segment = new HashSet<Segment>();
    }

    public long ID { get; set; }    
    public string Name { get; set; }            
    public ICollection<Segment> Segment { get; set; }
}


public class Segment
{
    public Segment()
    {        

    }

    public long ID { get; set; }
    public long MachineID { get; set; }
    public string Serial { get; set; }
}


public class MachineDto
{
    public MachineDto()
    {
        Segment = new List<SegmentDto>();
    }

    public long ID { get; set; }    
    public string Name { get; set; }            
    public ICollection<SegmentDto> Segment { get; set; }
}


public class SegmentDto
{
    public SegmentDto()
    {        

    }

    public long ID { get; set; }
    public string Serial { get; set; }
}

1 Ответ

0 голосов
/ 31 мая 2018

После долгих раздумий с AfterMap () я обнаружил параметр UseDestinationValue, когда он будет определен, он будет использовать существующий HashSet вместо замены ICollection списком.

cfg.CreateMap<MachineDto, Machine>(MemberList.Source)
.ForMember(dest => dest.Segment, opt => opt.UseDestinationValue());
...