如何使用Automapper将视图模型对象映射到实体对象?

问题描述 投票:0回答:1

如何将视图模型映射到此类对象的实体? 我有一个实体Word喜欢

public class Word: BaseEntity<long>
{
    public string? Name { get; set; }
    public string? Definition { get; set; }
    
    public List<WordQuest>? WordQuestList { get; set; }
}

public class WordQuest
{
    public long WordId { get; set; }
    public Word? Word { get; set; }

    public long WordOptionId { get; set; }
    public WordOption? WordOption { get; set; }
}
public class WordOption : BaseEntity<long>
{
    public string? Name { get; set; }

    public List<WordQuest>? WordList { get; set; }
}
public class WordVm
{
    public long Id { get; set; }
    
    public string? Name { get; set; }
    public string? Definition { get; set; }

    public List<WordQuestVm>? WordQuestList { get; set; }

    public WordVm()
    {
        WordQuestList = new List<WordQuestVm>();
    }
}

public class WordQuestVm
{
    public long WordOptionId { get; set; }
    public string? WordOption { get; set; }
}

如何使用自动映射器将 WordVm 映射到带有列表的 Word。

我尝试使用给定的代码。

CreateMap<WordVm, Word>()
            .ForMember(dest => dest.WordQuestList, opt => opt.MapFrom(src => src.WordQuestList));

        CreateMap<WordQuestVm, WordOption>()
            .ForMember(dest => dest.Id, opt => opt.MapFrom(src => src.WordOptionId))
            .ForMember(dest => dest.Name, opt => opt.MapFrom(src => src.WordOption));

在映射列表时面临问题...

c# automapper
1个回答
0
投票

使用自动映射器将 WordVm 映射到 Word 的一种可能方法是创建从 WordQuestVm 到 WordQuest 的映射,然后在从 WordVm 到 Word 的映射中使用该映射。例如:

CreateMap<WordQuestVm, WordQuest>()
.ForMember(dest => dest.WordOptionId, opt => opt.MapFrom(src => src.WordOptionId))
.ForMember(dest => dest.WordOption, opt => opt.MapFrom(src => Mapper.Map<WordOption>(src)));

CreateMap<WordVm, Word>()
.ForMember(dest => dest.Id, opt => opt.MapFrom(src => src.Id))
.ForMember(dest => dest.Name, opt => opt.MapFrom(src => src.Name)) 
.ForMember(dest => dest.Definition, opt => opt.MapFrom(src => src.Definition)) 
.ForMember(dest => dest.WordQuestList, opt => opt.MapFrom(src => Mapper.Map<List<WordQuest>>(src.WordQuestList)));

这样就可以将WordQuestVm的嵌套列表映射到Word实体中对应的WordQuest列表。如果需要,您还可以使用 ReverseMap 方法创建从 Word 到 WordVm 的反向映射。

© www.soinside.com 2019 - 2024. All rights reserved.