首页 > 解决方案 > 映射两个对象(带列表)的问题

问题描述

我正在寻找我的问题的解决方案......可能我的 Shifts 类无法映射。

我有实体类 Worker:

    public class Worker
{
    public int Id { get; set; }
    [Required]
    [MaxLength(50)]
    public string Name { get; set; }
    [Required]
    [MaxLength(50)]
    public string LastName { get; set; }
    [MaxLength(200)]
    public string PhotoFilePath { get; set; }
    public Workplace Workplace { get; set; }
    public int WorkplaceId { get; set; }
    public List<Service> Services { get; set; }
    public List<Shift> Shifts { get; set; }

    public IEnumerable<Worker> ToList()
    {
        throw new NotImplementedException();
    }
}

和模型WorkerModel:

        public int Id { get; set; }
    [Required]
    [DisplayName("Imię")]
    public string Name { get; set; }
    [DisplayName("Nazwisko")]
    public string LastName { get; set; }
    [Display(Name = "Zdjęcie")]
    public IFormFile Photo { get; set; }
    public string PhotoFilePath { get; set; }
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int WorkplaceId { get; set; }
    public List<ServiceModel> Services { get; set; }
    public List<ShiftModel> Shifts { get; set; }
}

我的默认映射器配置文件:

            //Mapping workers
        CreateMap<Worker, WorkerModel>();
        CreateMap<WorkerModel, Worker>();

当我在操作中尝试将模型映射到实体类时:

        Worker worker = _mapper.Map<Worker>(model);

我有一个问题:

AutoMapperMappingException: Missing type map configuration or unsupported mapping.

标签: asp.net-coremappingmapper

解决方案


这是由不同的映射类型引起的。以房产Service为例。

该资源是一种Service.

在此处输入图像描述

但目的地是一种ServiceModel.

在此处输入图像描述

所以,他们需要被转换。这是一个演示。

我根据您的模型创建Serviceand 。ServiceModel

public class Service
{
    public int serviceID { get; set; }
    public string myservice { get; set; }
}
public class ServiceModel
{
    public int serviceID { get; set; }
    public string myservice { get; set; }
}

这是映射关系。

public class AutomapProfile : Profile
{
    public AutomapProfile()
    {
        CreateMap<Worker, WorkerModel>();
        CreateMap<WorkerModel, Worker>()
            .ForMember(m => m.Services, x => x.MapFrom(y => y.Services.Select(a=>
            new Service
            {
                 serviceID=a.serviceID,
                  myservice=a.myservice
            })));
    }
}

这是映射方法。

public IActionResult Index()
    { 
        var model = new WorkerModel
        {
            Id=1,
            Name="names",
            //...
            Services = new List<ServiceModel>
            {
                new ServiceModel{ serviceID=1, myservice="service1"},
                new ServiceModel{ serviceID=2, myservice="service2"},
            },
            //...
        };
        Worker worker = _mapper.Map<Worker>(model);
        return Ok(worker);
    }

结果。

在此处输入图像描述


推荐阅读