映射子字段问题

mapping sub field issue

我在将实体映射到模型时遇到问题。

实体class 1

enter public partial class Contact 
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int? CityId { get; set; }

    public virtual City City { get; set; }
}

class 2

public partial class City 
{
    public City()
    {
        Contact = new HashSet<Contact>();
    }
    public int ID  { get; set; }
    public string Name { get; set; }

    public virtual ICollection<Contact> Contact { get; set; }
}

我联系人的型号是

 public class ContactViewModel 
  {
        public int Id { get; set; }
        public string Name { get; set; }
        public KeyValueGeneric<int?, string> City = new KeyValueGeneric<int?, string>();
    }

我正在尝试这样映射它:

        CreateMap<ContactViewModel, Contact>()
            .ForMember(dest => dest.CityId, opts => opts.MapFrom(src => src.City.Id));


        CreateMap<Contact, ContactViewModel>()
            .ForMember(dest => dest.City.Id, input => input.MapFrom(src => src.CityId))
            .ForMember(dest => dest.City.Value, input => input.MapFrom(src => src.City.Name));

但我得到:

must resolve to top-level member and not any child object message

我将不胜感激任何帮助

假设这是因为您正在映射到子属性:

dest.City.Id

为什么不为 City 创建一个相应的模型(例如 CityViewModel)并直接映射到它?

CreateMap<City, CityViewModel>();


CreateMap<Contact, ContactViewModel>()
        .ForMember(dest => dest.City, input => input.MapFrom(src => src.City));

如果您确实想要映射到子属性,您可能需要使用 ForPath() 而不是 ForMember()。例如:

.ForPath(dest => dest.City.Id, input => input.MapFrom(src => src.CityId))