使用一个DTO自动映射嵌套的类

时间:2020-02-17 10:56:13

标签: c# asp.net-core-3.0 .net-core-3.0

因此,我正在与一些朋友一起构建Web应用程序,在其中我将为其创建后端代码。我有几种模型,但是httppost中只有一种模型。

所以我收到的传入http帖子有什么:

    public class LanpartyDto
{
    public Guid Id { get; set; }

    [Required]
    public string Name { get; set; }

    [Required]
    public DateTime Date { get; set; }

    [Required]
    public string Description { get; set; }

    public Dictionary<DateTime, IList<string>> UsersAvailableForDate { get; set; }

}

public class Lanparty
{
    public Guid Id { get; set; }

    [Required]
    public string Name { get; set; }

    [Required]
    public DateTime Date { get; set; }

    [Required]
    public string Description { get; set; }

    [Required]
    public Guid  AvailablityId{ get; set; }

    public IList<Availability> AvailableUsers { get; set; }
}


public class Availability
{

    public Guid Id { get; set; }

    public string DateAvailable { get; set; }

    public IList<string> Name { get; set; }

}

 public AutoMapping()
    {
        CreateMap<Lanparty, LanpartyDto>()
            .ForMember(dest => dest.UsersAvailableForDate, m => m.MapFrom(src => src.AvailableUsers.ToDictionary(k=>k.DateAvailable, v=>v.Name.ToList())));



    }

那么我可以将一个dto映射到多个嵌套类吗?到目前为止,我猜不是因为我得到了地图异常,然后在这里和google上浏览,是否有可能我也可以进行可用性查询,但是我看不到有什么用? 那么,最好的选择是什么,尝试更改前端代码,以便更改dto?还是自己创建映射代码,因为对于一类来说这并不困难?

1 个答案:

答案 0 :(得分:2)

您想要的映射如下所示:

CreateMap<Lanparty, LanpartyDto>()
    .ForMember(dest => dest.UsersAvailableForDate,
        m => m.MapFrom(src => src.AvailableUsers.ToDictionary(k => k.DateAvailable, v => v.Name)));

CreateMap<LanpartyDto, Lanparty>()
    .ForMember(dest => dest.AvailableUsers,
        m => m.MapFrom(src => src.UsersAvailableForDate.Select(u => new Availability { DateAvailable = u.Key, Name = u.Value })));

我允许自己将Availability.DateAvailable属性类型更改为DateTime,因为我不太了解为什么在此处使用字符串。但是,如果您希望它是一个字符串,只需将ToString()添加到u.Key部分。