[英]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()
方法。
因此,在您的情況下,需要ModuleName
到Module
Name
到ModuleDto
映射, Rack
類也需要,請參見此小提琴 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.