2016-08-25 2 views
0

Можно ли указать 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 для получения желаемого поведения?

(Это вызывает у меня много проблем с Entity Framework).

+1

Возможный дубликат [Как вы отобразить DTO в существующий экземпляр объекта с вложенными объектами, используя AutoMapper] (http://stackoverflow.com/questions/ 3672447/как-делать-вы-карту-а-DTO-к-с существующей объектно-например-с-вложенными объектами, используя-о) – MisterIsaak

ответ

1

Я понял это сам. Решение было довольно простым.

создание Правильная карта выглядит следующим образом:

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>(); 
Смежные вопросы