【问题标题】:Automapper with nested child list具有嵌套子列表的 Automapper
【发布时间】:2012-03-12 18:47:36
【问题描述】:

我有以下两个类:

public class Module
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string ImageName { get; set; }
    public virtual ICollection<Page> Pages { get; set; }
}

public class ModuleUI
{
    public int Id { get; set; }
    public string Text { get; set; }
    public string ImagePath { get; set; }
    public List<PageUI> PageUIs { get; set; }
}

映射必须是这样的:

Id -> Id
Name -> Text
ImageName -> ImagePath 
Pages -> PageUIs

如何使用 Automapper 做到这一点?

【问题讨论】:

  • 没有 AutoMapper 你可以写:new ModuleUI {Id = module.Id, ImagePath = module.ImageName, PageUIs = new List&lt;PageUI&gt;(module.Pages.Cast&lt;PageUI&gt;())};
  • 很抱歉将此作为答案发布,我更愿意将其作为对解决方案的评论,但由于声誉低于 50,我不能。选定的解决方案工作得很好,谢谢!但我一直在想一件事:我通常按照实体将多个配置文件上的映射分开。因此,在这里我将有一个带有 Module 到 ModuleUI 映射设置的 ModuleProfile 和一个带有 Page 到 PageUI 映射设置的 PageProfile。在这种情况下,你会怎么做?你还包括 - Mapper.CreateMap(); - 在 ModuleProfile 上?

标签: c# .net c#-4.0 automapper automapper-2


【解决方案1】:

您可以使用ForMemberMapFrom (documentation)。
您的 Mapper 配置可能是:

Mapper.CreateMap<Module, ModuleUI>()
    .ForMember(s => s.Text, c => c.MapFrom(m => m.Name))
    .ForMember(s => s.ImagePath, c => c.MapFrom(m => m.ImageName))
    .ForMember(s => s.PageUIs, c => c.MapFrom(m => m.Pages));
Mapper.CreateMap<Page, PageUI>();

用法:

var dest = Mapper.Map<ModuleUI>(
    new Module
    {
        Name = "sds",
        Id = 2,
        ImageName = "sds",
        Pages = new List<Page>
        {
            new Page(), 
            new Page()
        }
    });

结果:

【讨论】:

  • 是的! AutoMapper 威胁 null 值并且对我也有效!
  • 谢谢!经过这么多年,这个答案仍然有效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-01
  • 2020-02-04
  • 2016-10-13
  • 2016-06-21
  • 2019-04-26
  • 1970-01-01
相关资源
最近更新 更多