C# 自动映射9:映射子属性

C# 自动映射9:映射子属性,c#,asp.net-core,automapper,C#,Asp.net Core,Automapper,对于Automapper 7,我使用以下代码映射子属性: Mapper.CreateMap<DomainClass, Child>(); Mapper.CreateMap<DomainClass, Parent>() .ForMember(d => d.Id, opt => opt.MapFrom(s => s.Id)) .ForMember(d => d.A, opt => opt.MapFrom(s

对于Automapper 7,我使用以下代码映射子属性:

    Mapper.CreateMap<DomainClass, Child>();
    Mapper.CreateMap<DomainClass, Parent>()
      .ForMember(d => d.Id, opt => opt.MapFrom(s => s.Id))
      .ForMember(d => d.A, opt => opt.MapFrom(s => s.A))
      .ForMember(d => d.Child, 
                 opt => opt.MapFrom(s => Mapper.Map<DomainClass, Child>(s)))
然后我使用_mapper对象而不是静态映射器

 Mapper.CreateMap<DomainClass, Child>();
 Mapper.CreateMap<DomainClass, Parent>()
   .ForMember(d => d.Id, opt => opt.MapFrom(s => s.Id))
   .ForMember(d => d.A, opt => opt.MapFrom(s => s.A))
   .ForMember(d => d.Child, 
              opt => opt.MapFrom(s => _mapper.Map<DomainClass, Child>(s)))
Mapper.CreateMap();
Mapper.CreateMap()
.ForMember(d=>d.Id,opt=>opt.MapFrom(s=>s.Id))
.ForMember(d=>d.A,opt=>opt.MapFrom(s=>s.A))
.FormMember(d=>d.Child,
opt=>opt.MapFrom(s=>u mapper.Map(s)))
但它不起作用。子属性始终为空。
我做错了什么?

你可以试试这样的东西

 static Mapper InitializeAutomapper()
    {
        var config = new MapperConfiguration(cfg => {
            cfg.CreateMap<DomainClass, Child>();
        });
        var mapper = new Mapper(config);
        return mapper;
    }
 var mapper = InitializeAutomapper();
Mapper.CreateMap<DomainClass, Child>();
Mapper.CreateMap<DomainClass, Parent>()
.ForMember(d => d.Id, opt => opt.MapFrom(s => s.Id))
.ForMember(d => d.A, opt => opt.MapFrom(s => s.A))
.ForMember(d => d.Child, 
              opt => opt.MapFrom(s => mapper.Map<DomainClass, Child>(s)))
staticmapper InitializeAutomapper()
{
var config=new-MapperConfiguration(cfg=>{
CreateMap();
});
变量映射器=新映射器(配置);
返回映射器;
}
var mapper=InitializeAutomapper();
CreateMap();
Mapper.CreateMap()
.ForMember(d=>d.Id,opt=>opt.MapFrom(s=>s.Id))
.ForMember(d=>d.A,opt=>opt.MapFrom(s=>s.A))
.FormMember(d=>d.Child,
opt=>opt.MapFrom(s=>mapper.Map(s)))

ForMember(d=>d.Child,opt=>opt.MapFrom(s=>s)
我试过了,但是Child属性总是空的。重新编译会有帮助。做一个我们可以执行并看到失败的测试。更新的代码中的
Mapper
是什么?您在其中同时引用了它和
\u Mapper
。停止使用静态API并转到
 static Mapper InitializeAutomapper()
    {
        var config = new MapperConfiguration(cfg => {
            cfg.CreateMap<DomainClass, Child>();
        });
        var mapper = new Mapper(config);
        return mapper;
    }
 var mapper = InitializeAutomapper();
Mapper.CreateMap<DomainClass, Child>();
Mapper.CreateMap<DomainClass, Parent>()
.ForMember(d => d.Id, opt => opt.MapFrom(s => s.Id))
.ForMember(d => d.A, opt => opt.MapFrom(s => s.A))
.ForMember(d => d.Child, 
              opt => opt.MapFrom(s => mapper.Map<DomainClass, Child>(s)))