繁体   English   中英

自动映射器-根据映射对象的类型设置值

[英]Automapper - set value based on type of object mapped

这是我的DTO:

public class DiaryEventType_dto
{
    public Guid Id { get; set; }
    public string Name { get; set; }
    public string  Group { get; set; }
    public bool Redundant { get; set; }
    public string Type { get; set; }
}

并且它映射到两种可能的实体类型:

public partial class UserDiaryEventType
{
    public System.Guid Id { get; set; }
    public string Name { get; set; }
    public string TypeGroup { get; set; }
    public bool Redundant { get; set; }
}

public partial class SystemDiaryEventType
{
    public System.Guid Id { get; set; }
    public string Name { get; set; }
    public string TypeGroup { get; set; }
    public bool Redundant { get; set; }
}

“ Type”属性旨在区分DTO最初是从哪个类型映射的(为什么我要这样做而不是拥有两个单独的DTO类?传统代码,这就是为什么-很难全部更改)。

理想情况下,我想在自动映射过程中填充它,否则,映射器会向我扔一个摇摆器,因为未映射“类型”:

        Mapper.CreateMap<Entities.UserDiaryEventType, DiaryEventType_dto>()
            .ForMember(m => m.Group, o => o.MapFrom(s => s.TypeGroup));
        Mapper.CreateMap<DiaryEventType_dto, Entities.UserDiaryEventType>()
            .ForMember(m => m.TypeGroup, o => o.MapFrom(s => s.Group));
        Mapper.CreateMap<Entities.SystemDiaryEventType, DiaryEventType_dto>()
            .ForMember(m => m.Group, o => o.MapFrom(s => s.TypeGroup));
        Mapper.CreateMap<DiaryEventType_dto, Entities.SystemDiaryEventType>()
            .ForMember(m => m.TypeGroup, o => o.MapFrom(s => s.Group));

但是我不知道这样做的语法。 就像是:

//pseudo code
Mapper.CreateMap<DiaryEventType_dto, Entities.UserDiaryEventType>()
     .SetValue("User");
Mapper.CreateMap<DiaryEventType_dto, Entities.SystemDiaryEventType>()
     .SetValue("System");

可能吗?

ResolveUsing使您可以使用自定义值或计算。

Mapper.CreateMap<Entities.UserDiaryEventType, DiaryEventType_dto>()
        .ForMember(m => m.Group, o => o.MapFrom(s => s.TypeGroup))
        .ForMember(m => m.Group, o => o.ResolveUsing(s => "User"));

暂无
暂无

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

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