是否可以在地图创建过程中告诉AutoMapper映射到现有的嵌套属性实例?
我们假设我有一个班级:
public class SomeClass
{
public int Id {get; set;}
public Complex Settings {get; set;}
}
public class Complex
{
public int Id { get; set;}
public string SomeText { get; set;}
}
我想创建从SomeClass到SomeClass的地图,并使用它将属性映射到现有实例。
Mapper.CreateMap<SomeClass, SomeClass>()
.ForMember(src => src.Settings, opts => opts.MapFrom(src => Mapper.Map<Complex, Complex>(src));
Mapper.CreateMap<Complex, Complex>();
Mapper.Map<SomeClass, SomeClass>(a, b);
其中a和b是SomeClass的实例。问题是此解决方案将属性映射到现有实例,但创建了Complex的新实例,而不是将a.Complex映射到现有的b.Complex。
是否可以配置AutoMapper以获得所需的行为?
(这导致我在实体框架中遇到很多问题)。
答案 0 :(得分:2)
我自己想通了。解决方案非常简单。
正确的地图创建如下所示:
Mapper.CreateMap<SomeClass, SomeClass>()
.ForMember(src => src.Settings, opts => opts.Ignore())
.AfterMap((src, dst) => Mapper.Map<TestSettings,TestSettings>(src.TestSettings, dst.TestSettings);
Mapper.CreateMap<Complex, Complex>();