简体   繁体   English

自动映射将枚举的集合映射到视图模型集合中

[英]Automapper mapping collection of enums into view model collection

  • AutoMapper 5.3.0 alpha (Yet to upgrade to the latest and greatest) AutoMapper 5.3.0 alpha(尚未升级到最新最好)

I have a DTO as follows: 我有一个DTO如下:

public class AoACrudFieldValuesGdataHealthInput
{
    public AoACrudFieldValuesGdataHealthInput()
    {
       PrevHealthAssessment = new HashSet<HealthPrevHealthAssessmentEnum>();
    }

    public HashSet<HealthPrevHealthAssessmentEnum> PrevHealthAssessment { get; set; }
}

and a EF POCO of: 和EF POCO:

[Table("Health", Schema = "gdata")]
public class GdataHealthTableModel : AuditedEntity
{
    public GdataHealthTableModel()
    {
        //PrevHealthAssessment = new HashSet<HealthPrevHealthAssessmentEnum>();
    }

    [ForeignKey("Id")]
    public ICollection<GdataHealthPrevAssesmentTableModel> PrevHealthAssessment { get; set; }
}

and: 和:

[Table("HealthPrevAssesment", Schema = "gdata")]
public class GdataHealthPrevAssesmentTableModel : AuditedEntity
{
    public HealthPrevHealthAssessmentEnum Assessment { get; set; }
}

I need help extending my map: 我需要帮助扩展我的地图:

CreateMap<AoACrudFieldValuesGdataHealthInput, GdataHealthTableModel>();

such that AoACrudFieldValuesGdataHealthInput.PrevHealthAssessment ends up in GdataHealthTableModel.PrevHealthAssessment. 这样AoACrudFieldValuesGdataHealthInput.PrevHealthAssessment最终会在GdataHealthTableModel.PrevHealthAssessment中结束。 Currently I get an error as my CreateMap() is not detailed enough - naturally. 目前我收到一个错误,因为我的CreateMap()不够详细 - 当然。

Is this possible? 这可能吗? Or do I get the mapper to ignore that field and do it by hand? 或者我是否让映射器忽略该字段并手动完成?

NOTE: For both EF POCO's I have omitted the Id field which is an auto increment for sake of brevity. 注意:对于两个EF POCO,我省略了Id字段,为了简洁起见,这是一个自动增量。

Define an additional map for HealthPrevHealthAssessmentEnum -> GdataHealthPrevAssesmentTableModel : HealthPrevHealthAssessmentEnum - > GdataHealthPrevAssesmentTableModel定义其他地图:

CreateMap<AoACrudFieldValuesGdataHealthInput, GdataHealthTableModel>()
    .ForMember(dest => dest.PrevHealthAssessment, o => o.MapFrom(src => src.PrevHealthAssessment));

CreateMap<HealthPrevHealthAssessmentEnum, GdataHealthPrevAssesmentTableModel>()
    .ForMember(dest => dest.Id, o => o.Ignore()) // auto ID
    .ForMember(dest => dest.Assessment , o => o.MapFrom(src => src));

Not sure of AutoMapper can convert an ICollection to a HashSet out of the box, I think it can. 不确定AutoMapper可以将ICollection转换为开箱即用的HashSet,我认为可以。

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

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