【问题标题】:automapper mapping objects自动映射器映射对象
【发布时间】:2020-08-30 13:13:57
【问题描述】:

这个附加要求基于这个问题one source to mutiple destination

class Dest1    
{    
 string prop1;
 string prop2;
 string prop3;
 pubic List<Dest3> Dests3 {get;set;}
}

    class Dest3        
    {    
     string prop7;    
   string prop8;
    }

 class Source2
 {
 string prop7;
 string prop8;
 }
  1. 我需要在自动映射器中将 Source2 映射到 Dest1(Dest3 是一个列表,也需要映射)

我的映射类:(不工作)

 CreateMap<Source2, Dest3>();
            CreateMap<Source2, Dest1>()
                .ForMember(d => d.Dests3 , opt => opt.MapFrom(s => s));

【问题讨论】:

    标签: c# automapper


    【解决方案1】:

    所以,假设当这个映射发生时 Dest3 应该是一个单项列表,它的配置应该是这样的:

    var configuration = new MapperConfiguration(cfg =>
    // Mapping Config
    cfg.CreateMap<Source2, Dest1>()
        .ForMember(dest => dest.prop1, opt => opt.Ignore())
        .ForMember(dest => dest.prop2, opt => opt.Ignore())
        .ForMember(dest => dest.prop3, opt => opt.Ignore())
        .ForMember(dest => dest.Dests3, opt => opt.MapFrom(src => 
                                                          new List<Dest3> { 
                                                              new Dest3 {
                                                                  prop7 = src.prop7,
                                                                  prop8 = src.prop8
                                                              }
                                                          }));
    
    // Check AutoMapper configuration
    configuration.AssertConfigurationIsValid();
    

    然后,您可以使用映射器在任何需要的地方处理映射,如下所示:

    public class Foo {
        private IMapper _mapper;
        public Foo(IMapper mapper) {
            _mapper = mapper;
        }
    
        // Map Source2 -> Dest1
        public Dest1 Bar(Source2 source) {
            return _mapper.Map<Dest1>(source);
        }
    }
    

    【讨论】:

    • 非常感谢...在这种情况下是否可以先替换 somthing 或默认值,因为我有 15 多个类似 docs.automapper.org/en/stable/Flattening.html 的属性
    • 在这种情况下您不能使用 FirstOrDefault。您正在从字符串映射到具有字符串属性的对象列表。换句话说,列表在您映射之前为空。只有从列表映射到字符串时,FirstOrDefault 才是一个选项。
    • 谢谢..如果 source2 有其他属性可以像这个仪式一样使用吗?新列表 { 新 Dest3 { prop7 = src, prop8=src; }
    • 是/否。您的评论让我意识到我错过了配置中的一部分。更新了答案以解决该问题/回答您的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-05
    • 1970-01-01
    相关资源
    最近更新 更多