成员的 Automapper 自定义配置仅支持类型上的顶级个人成员

Automapper Custom configuration for members is only supported for top-level individual members on a type

我正在尝试映射从数据库中获得的结果,并且我有以下模型

public class ClientTest
{
    public int Id { get; set; }
    public string Name { get; set; }
}

public class ClientTestDto
{
    public int Id { get; set; }
    public string Name { get; set; }
}

public class ClientDbItem
{
    public ClientTest Client { get; set; }
    public Address Address { get; set; }
}

public class Address
{
    public int Id { get; set; }
    public string Value { get; set; }
}

和以下映射

CreateMap<ClientTest, ClientTestDto>();

CreateMap<ClientDbItem, ClientTestDto>()
    .ForMember(dest => dest, opt => opt.MapFrom(src => src.Client));

当我 运行 得到软件时

Custom configuration for members is only supported for top-level individual members on a type

如果我首先为 ClientTest 和 ClientTestDto 创建配置,为什么会发生这种情况?

有一个特殊的 API,IncludeMembers。参见 here

当您尝试将顶级元素映射到构造函数时,也可能会出现此错误:

    .ForMember(dest => dest, opt => opt.MapFrom(
        src => new B1(src.Prop3, src.Prop4)));

而不是将顶级元素 MEMBER 映射到构造函数(工作正常):

    .ForMember(dest => dest.MyProperty, opt => opt.MapFrom(
        src => new B1(src.Prop3, src.Prop4)));

为避免这种情况,请使用 .ForCtorParam

示例:

CreateMap<Source, DestinationWithConstructor>()
.ForCtorParam("code", opt => opt.MapFrom(src => src.Prop3))
.ForCtorParam("text", opt => opt.MapFrom(src => src.Prop4))