1

我有以下抽象类

public abstract class BaseClass
{
    public int NumberProperty { get; set; }
}

public abstract class BaseClass_DTO
{
    public int NumberProperty { get; set; }
    public string NumberPropertyAsString { get; set; }
}

和下面的具体类

public class ConcreteA : BaseClass
{
    public string StringProperty { get; set; }
}

public class ConcreteA_DTO : BaseClass_DTO
{
    public string StringProperty { get; set; }
}

这是地图

Mapper.Initialize( cfg => {
    cfg.CreateMap<BaseClass, BaseClass_DTO>()
        .ForMember( p => p.NumberPropertyAsString, opt => opt.MapFrom( x => x.NumberProperty.ToString() ) );
    cfg.CreateMap<ConcreteA, ConcreteA_DTO>()
        .IncludeBase<BaseClass, BaseClass_DTO>()
        .ReverseMap();
} );
Mapper.AssertConfigurationIsValid();

代码说配置无效,因为

Unmapped members were found. Review the types and members below.
Add a custom mapping expression, ignore, add a custom resolver, or modify the source/destination type
=============================================================================
ConcreteA_DTO -> ConcreteA (Source member list)
Temporary.Test.ConcreteA_DTO -> Temporary.Test.ConcreteA (Source member list)

Unmapped properties:
NumberPropertyAsString

由于ReverseMap()调用而发生错误。如何设置反向映射以忽略成员而不复制映射?

4

1 回答 1

1

您将需要忽略NumberPropertyAsString反向地图中的

.ReverseMap()
   .ForSourceMember(p => p.NumberPropertyAsString, opt => opt.Ignore());

看来,在您的特定映射配置中,您应该同时在基础和混凝土中进行配置。

1.在基类映射中。

cfg.CreateMap<BaseClass, BaseClass_DTO>()
    .ForMember(p => p.NumberPropertyAsString, opt => opt.MapFrom(x => x.NumberProperty.ToString()))
    .ReverseMap()
          .ForSourceMember(p => p.NumberPropertyAsString, opt => opt.Ignore());

2.在具体的类图中。

cfg.CreateMap<ConcreteA, ConcreteA_DTO>()
    .IncludeBase<BaseClass, BaseClass_DTO>()
    .ReverseMap()
         .ForSourceMember(p => p.NumberPropertyAsString, opt => opt.Ignore());
于 2015-04-04T21:50:02.513 回答