简体   繁体   English

AutoMapper 在子类中使用父类映射

[英]AutoMapper use parent class mapping in child classes

I've got two parent classes我有两个父类

class Settings
{
     public Field
}

and

class SettingsDb
{
    public  FieldDB
}

and Field mapped width FieldDB by ForMember expression和字段映射宽度 FieldDB 通过 ForMember 表达式

CreateMap<SettingsDb, Settings>()
                 .ForMember(dest => dest.Field,
                 opt => opt.MapFrom(src => some lambda with src.FieldDb));

I also have two child classes我也有两个子类

class AdminSettings : Setting
{
inherits Field
}

class AdminSettingsDb : SettingDb
{
inherits FieldDb
}

how can I map AdminSettings with AdminSettingsDb without doing ForMember again for this inherited fields?如何在不为这个继承的字段再次执行 ForMember 的情况下将 AdminSettings 与 AdminSettingsDb 映射?

CreateMap<AdminSettings, AdminSettingsDb>(); 

now this fields are empty after mapping现在映射后此字段为空

Simpler solution更简单的解决方案

   CreateMap<BaseEntity, BaseDto>()
       .ForMember(dest => dest.SomeMember, opt => opt.MapFrom(src => src.OtherMember));

    CreateMap<DerivedEntity, DerivedDto>()
        .IncludeBase<BaseEntity, BaseDto>();

Include the child classes in the mapping of the parent.在父类的映射中包含子类。

CreateMap<SettingsDb, Settings>()
    .Include<AdminSettings, AdminSettingsDb>()
    .ForMember(dest => dest.Field,
             opt => opt.MapFrom(src => some lambda with src.FieldDb));

CreateMap<AdminSettings, AdminSettingsDb>(); 

See Mapping inheritance .请参阅映射继承

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

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