繁体   English   中英

子类型上的 AutoMapper 自定义解析器

[英]AutoMapper custom resolver on the child type

public class Car
{
    public int Id {get;set;}
    public string Name {get;set;}
    public Owner OwnerData {get;set}
}

public class Owner
{
    public int Id {get;set;}
    public string Name {get;set;}
    public string Phone {get;set;}
}


public class CarProfile : Profile
{
    public CarProfile()
    {
        CreateMap<Car, Owner>()
          .ForMember(m => m.OwnerData.Name, o=>o.MapFrom(p=>p.Name));
    }
}

Owner ownerData = repository.Get<Owner>(id);
IEnumerable<Car> data = mapper.Map<IEnumerable<Car>>(ownerData);

"ClassName": "System.ArgumentException", "Message": "Expression 'm => m.OwnerData.Name' 必须解析为顶级成员而不是任何子对象的属性。您可以使用 ForPath,一个自定义解析器子类型或 AfterMap 选项。",

我怎么可以map这个?

这不起作用,因为您在目标 lambda 中使用 2 级。

使用 Automapper,您只能将 map 提升到 1 级。 要解决问题,您需要使用单个级别。

CreateMap<Owner, Car>().ForMember(dest => dest.OwnerData,
         input => input.MapFrom(i => new Owner { Name = i.Name })); 

您正在使用 ForMember 但设置了 Owner 的子成员。 用 ForPath 替换 ForMember,它应该可以工作

CreateMap<Car, Owner>()
    .ForPath(m => m.OwnerData.Name, o=>o.MapFrom(p=>p.Name));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM