自动映射:映射到现有嵌套复杂属性

时间:2016-08-25 16:46:10

标签: c# .net automapper

是否可以在地图创建过程中告诉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以获得所需的行为?

(这导致我在实体框架中遇到很多问题)。

1 个答案:

答案 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>();