同じソースタイプで異なる送り先タイプのマップに対して、AutoMapper(v2.2)で継承マッピングを使用できますか?AutoMapper - 継承マッピングが機能しない、同じソース、複数の送り先
私は、この基本的な状況(実際のクラスはより多くの性質を持っている)があります。
public abstract class BaseViewModel
{
public int CommonProperty { get; set;}
}
public class ViewModelA : BaseViewModel
{
public int PropertyA { get; set; }
}
public class ViewModelB : BaseViewModel
{
public int PropertyB { get; set; }
}
ViewModelA
とViewModelB
は同じEntityクラスの異なる表現です:
public class Entity
{
public int Property1 { get; set; }
public int Property2 { get; set; }
public int Property3 { get; set; }
}
私は再利用したいです
Mapper.CreateMap<Entity, BaseViewModel>()
.Include<Entity, ViewModelA>()
.Include<Entity, ViewModelB>()
.ForMember(x => x.CommonProperty, y => y.MapFrom(z => z.Property1));
Mapper.CreateMap<Entity, ViewModelA>()
.ForMember(x => x.PropertyA, y => y.MapFrom(z => z.Property2));
Mapper.CreateMap<Entity, ViewModelB>()
.ForMember(x => x.PropertyB, y => y.MapFrom(z => z.Property3));
01のように、それぞれのViewModelの
BaseViewModel
の同じマッピング。
残念ながら、これはうまくいかないようです。これらのようなコール:model
で
var model = Mapper.Map<Entity, ViewModelA>(entity);
結果はPropertyA
がマッピングされた、ではないCommonProperty
。私はhttps://github.com/AutoMapper/AutoMapper/wiki/Mapping-inheritanceの例を正しく実行していると思いますが、同じソースタイプで作成された複数のマップがAutoMapperを起動していることが心配です。
洞察?私はベースクラスのマッピングをグループ化するというアイデアが大好きですが、これはうまくいかないようです。
この質問の将来の読者のために、AutoMapperは問題が尋ねられて以来これを修正しているようです。 –
私はここに同じことをやろうとしているが、私はやろうとしている: 'VARモデル= Mapper.Map <エンティティ、BaseViewModel>(エンティティ)' しかし、それは、ViewModelAのインスタンスをしませ戻っていますBaseViewModelのインスタンス、MapView関数がBaseViewModel型を返すように指示しているとは思っていました。私はAutomapper 3.0を使用していますので、2.2からの元のバグが解決されたようです。 – njkremer
このSOのポストは私の問題を助け、働くのに望ましい効果を得ました。 http://stackoverflow.com/questions/27317719/automapper-how-to-not-repeat-mapping-config-from-complex-type-to-base-class – njkremer