我有两个班
public class AddressRequestModel
{
public Guid? UserKey { get; set; }
public string AddressLine1 { get; set; }
public string AddressLine2 { get; set; }
public int ZipCode { get; set; }
public string Location { get; set; }
public bool IsActive { get; set; }
}
public class AddressRequestModelList
{
public List<AddressRequestModel> AddressRequestModel { get; set; }
}
一个实体
public class Address
{
[Key]
public Guid AddressKey { get; set; }
public string AddressLine1{ get; set; }
public string AddressLine2 { get; set; }
public int ZipCode { get; set; }
public string Location { get; set; }
public Guid UserKey { get; set; }
public bool IsActive { get; set; }
}
和一个配置文件映射器
public class Profiler :Profile
{
public Profiler()
{
CreateMap<List<AddressRequestModelList>, List<Address>>();
}
}
映射此控制器时,我收到消息“缺少类型映射配置或不受支持的映射。”
public IEnumerable<AddressDto> CreateAddress(AddressRequestModelList addressRequestModel)
{
var requestModel = _mapper.Map<List<Address>>(addressRequestModel);
...
}
我需要帮助。
答案 0 :(得分:0)
指定集合类型之间的映射是不寻常的;通常你会映射项目类型:
public class Profiler : Profile
{
public Profiler()
{
CreateMap<AddressRequestModel, Address>();
}
}
AutoMapper 能够基于此执行集合映射:
public IEnumerable<AddressDto> CreateAddress(AddressRequestModelList addressRequestModel)
{
var requestModel = _mapper.Map<List<Address>>(addressRequestModel.AddressRequestModel);
//...
}
这比使用 List<T>
更灵活,因为可以根据需要使用其他集合类型:https://docs.automapper.org/en/stable/Lists-and-arrays.html
如果您必须指定到 List<T>
的映射,您可以执行以下操作:
public class Profiler : Profile
{
public Profiler()
{
CreateMap<AddressRequestModel, Address>();
CreateMap<AddressRequestModelList, List<Address>>()
.ConstructUsing(
(src, context) => context.Mapper.Map<List<Address>>(src.AddressRequestModel));
}
}
public IEnumerable<AddressDto> CreateAddress(AddressRequestModelList addressRequestModel)
{
var requestModel = _mapper.Map<List<Address>>(addressRequestModel);
//...
}