我有这样的源对象和目标对象:
class ProductWithCategories // Source class
{
public Product Product { get; set; } // Product is an EF entity class
public IEnumerable<Category> Categories { get; set; }
}
class ProductViewModel // Dest class
{
public int Id { get; set; }
// Other properties with the same name as Product class
public IEnumerable<CategoryViewModel> Categories { get; set; }
}
因此,我需要将 source.Product
的值映射到 dest
,然后将 source.Categories
映射到 dest .类别
。 AutoMapper 可以吗?
我已经试过了,当它失败时我并不感到惊讶:
config.CreateMap<ProductWithCategories, ProductViewModel>()
.ForMember(q => q, option => option.MapFrom(q => q.Product))
.ForMember(q => q.Categories, option => option.MapFrom(q => q.Categories));
这是我收到的异常:
[AutoMapperConfigurationException: Custom configuration for members is only supported for top-level individual members on a type.]
最佳答案
在与 OP 讨论后,发现他的主要需求是快速将源对象内的子对象/嵌套对象映射到展平的目标对象。他不想为目的地的每个属性都编写一个映射。
这里有一个方法可以实现这一点:
- 定义一个映射
Product
->ProductViewModel
用于展平 Product 的成员 - 定义一个映射
Category
至CategoryViewModel
定义一个映射
ProductWithCategories
->ProductViewModel
映射类别,然后在后图中映射Product
:config.CreateMap<ProductWithCategories, ProductViewModel>() .ForMember(q => q.Id, option => option.Ignore()) // flattened in AfterMap .ForMember(q => q.Categories, option => option.MapFrom(q => q.Categories)) .AfterMap((src, dst) => Mapper.Map(src.Product, dst));
关于c# - 如何使用 AutoMapper 将目标对象映射到源对象中的子对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35573006/