簡體   English   中英

自動映射和映射復雜集合

[英]Automapper and mapping complex collections

嗨,我有一個關於自動映射器的問題,問題是我有一個嵌套了其他模型集合的模型,並且該集合中的模型也有一些模型集合(例如DB模型):

public class Cabin 
{
    public uint Id { get; set; }
    public string Name { get; set; }        
    public Rack[] Racks { get; set; }
}

public class Rack
{
    public uint Id { get; set; }
    public string RackName { get; set; }
    public IPAddress IpAddress { get; set; }
    public int Port { get; set; }
    public Module[] Modules { get; set; }
}

public class Module
{
    public uint Id { get; set; }
    public string ModuleName { get; set; }
}

從Dto方面來看,我有類似以下內容:

public class CabinDto 
{
    public uint Id { get; set; }
    public string Name { get; set; }
    public RackDto[] Racks { get; set; }
}

public class RackDto
{
    public uint Id { get; set; }
    public string Name { get; set; }
    public ModuleDto[] Modules{ get; set; }
}

public class ModuleDto
{
    public string Name { get; set; }
}

因此,我想一次全部映射,但想出一種方法來映射具有不同屬性名稱的列表對象。

對於主要班級,我有:

CreateMap<Db.Cabin, Dto.Cabin>()
  .ForMember(dest => dest.Id, opt => opt.MapFrom(src => src.Id))
  .ForMember(dest => dest.Name, opt => opt.MapFrom(src => src.Name));
  // how to map nested list

我可以添加一些分配值並映射到該方法的方法,但是感覺不對。 我查看了文檔,只有帶有簡單名稱集合的示例具有相同的名稱列表。

有辦法嗎?

您只需要在嵌套列表中為該類型添加映射,AutoMapper就會處理。

CreateMap<Db.Module, Dto.Module>();
CreateMap<Db.Rack, Dto.Rack>();

同樣,如果源名稱和源名稱中的屬性名稱相同,則無需調用ForMember()方法。
因此,在您的情況下,需要ModuleNameModule NameModuleDto映射, Rack類也需要,請參見此小提琴

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM