使用一个 DTO 自动映射嵌套 类
Automapping nested classes with one DTO
所以我正在与一些朋友一起构建一个网络应用程序,我将在其中为其创建后端代码。我有几个模型,但只有一个模型来自 httppost.
所以我得到了传入的 http post:
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 映射到多个嵌套的 classes 吗?到目前为止,我猜不是因为我得到了地图异常并在此处和 google 上查看,如果我也可以提供 availabilitydto 是可能的,但我看不到它有什么用?
那么我尝试更改前端代码以便更改我的 dto 的最佳选择是什么?或者自己创建映射代码,因为这是一个 class 不难吗?
您想要的映射如下所示:
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
部分即可。
所以我正在与一些朋友一起构建一个网络应用程序,我将在其中为其创建后端代码。我有几个模型,但只有一个模型来自 httppost.
所以我得到了传入的 http post:
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 映射到多个嵌套的 classes 吗?到目前为止,我猜不是因为我得到了地图异常并在此处和 google 上查看,如果我也可以提供 availabilitydto 是可能的,但我看不到它有什么用? 那么我尝试更改前端代码以便更改我的 dto 的最佳选择是什么?或者自己创建映射代码,因为这是一个 class 不难吗?
您想要的映射如下所示:
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
部分即可。