簡體   English   中英

如何使用顯式成員映射配置AutoMapper for Polymorphism?

[英]How to configure AutoMapper for Polymorphism with explicit member mapping?

考慮以下基本情況:

Mapper.CreateMap<FromBase, ToBase>()
        .Include<FromD1, ToD1>()
        .Include<FromD2, ToD2>();

Mapper.CreateMap<FromD1, ToD1>()
        .ForMember( m => m.P0, a => a.MapFrom( x => x.Prop0 ) )
        .ForMember( m => m.P1, a => a.MapFrom( x => x.Prop1 ) );

Mapper.CreateMap<FromD2, ToD2>()
        .ForMember( m => m.P0, a => a.MapFrom( x => x.Prop0 ) )
        .ForMember( m => m.P2, a => a.MapFrom( x => x.Prop2 ) );

Mapper.AssertConfigurationIsValid();

FromBase[] froms = {
        new FromD1() { Prop0 = 10, Prop1 = 11 },
        new FromD2() { Prop0 = 20, Prop2 = 22 }
};

var tos = Mapper.Map<FromBase[], ToBase[]>( froms );

附:

public class FromBase {
    public int Prop0 { get; set; }
}
public class FromD1 : FromBase {
    public int Prop1 { get; set; }
}
public class FromD2 : FromBase {
    public int Prop2 { get; set; }
}

public class ToBase {
    public int P0 { get; set; }
}
public class ToD1 : ToBase {
    public int P1 { get; set; }
}
public class ToD2 : ToBase {
    public int P2 { get; set; }
}

它看起來像Automapper的doc上的例子

但是Mapper.AssertConfigurationIsValid()斷言拋出:

AutoMapperConfigurationException:“未映射ToBase上的以下1個屬性:P0在FromBase上添加自定義映射表達式,忽略或重命名該屬性。”

除非我遺漏了一些東西,與示例的唯一區別是我不依賴於約定,使用ForMember手動映射屬性。 還有幾個派生類。 不知道這些會是怎么回事,但我想不出別的什么。

任何想法?

雖然配置驗證斷言失敗,但映射實際上工作正常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM