我有一个扁平的 DTO,我需要将其映射到父子关系。我想通过 AutoMapper 来做到这一点,因为我在其他地方使用它并且效果很好。我已经看到了映射父和子的示例,但当子是一个集合并且源是一个扁平的 DTO 时却没有。我创建了一些可用于正确配置的类。以下是我的示例课程:
public class Parent
{
public int ParentId { get; set; }
public string ParentName { get; set; }
public List<Child> Children { get; set; }
}
public class Child
{
public int ChildId { get; set; }
public string ChildName { get; set; }
}
public class ParentChildDTO
{
public int ParentId { get; set; }
public string ParentName { get; set; }
public int ChildId { get; set; }
public string ChildName { get; set; }
}
我在启动时执行映射器初始化。在我尝试执行映射之前,我没有收到任何错误。下面是我的映射器初始化代码。我一直在注释掉的行中显示我尝试完成此操作的另一种方式:
AutoMapper.Mapper.Initialize(cfg =>
{
cfg.CreateMap<ParentChildDTO, Child>();
cfg.CreateMap<ParentChildDTO, Parent>()
.ForMember(dest => dest.Children, opt => opt.MapFrom(src => src));
//.ForMember(dest => dest.Children, opt => opt.MapFrom(src => new Child { ChildId = src.ChildId, ChildName = src.ChildName }));
});
下面是我用来尝试执行映射配置的代码:
ParentChildDTO parentChildDTO = new ParentChildDTO { ParentId = 1, ParentName = "Parent Name", ChildId = 2, ChildName = "Child Name" };
Parent parent = AutoMapper.Mapper.Map<ParentChildDTO, Parent>(parentChildDTO);
List<LienActivity> mapTest = AutoMapper.Mapper.Map<List<BaseActivityUploadDTO>, List<LienActivity>>(request.Activities);
我考虑过使用自定义值解析器,但希望通过正确的配置来避免复杂性和额外的代码。
这是我使用上述代码得到的错误:
错误映射类型。
映射类型:ParentChildDTO -> Parent
类型映射配置:ParentChildDTO -> Parent
属性:儿童