映射子字段问题
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))
我在将实体映射到模型时遇到问题。
实体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))