猿问

AutoMapper - 将列表映射到 HashSet

我想将我的 DTO 映射到一个实体。两者之间的唯一区别是我的 dto 使用 List 作为集合类型,而实体使用 HashSet。如何配置 Automapper 在遇到 ICollection 时自动映射到 HashSet?目前它只是用列表替换实体中的哈希集。


示例类和映射:


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; }

}


元芳怎么了
浏览 152回答 1
1回答

哈士奇WWW

在对 AfterMap() 进行大量摆弄之后,我找到了 UseDestinationValue 选项,定义后它将重用现有的 HashSet 而不是用列表替换 ICollection。cfg.CreateMap<MachineDto,&nbsp;Machine>(MemberList.Source) .ForMember(dest&nbsp;=>&nbsp;dest.Segment,&nbsp;opt&nbsp;=>&nbsp;opt.UseDestinationValue());
随时随地看视频慕课网APP
我要回答