2011-06-20 11 views
5

Given następujących klas:Automapper: Resolve źródło Nazwa obiektu z automapped obiektu

public class User 
{ 
    public int Id {get;set;} 
    public PersonName Name {get;set;} 
} 

public class PersonName 
{ 
    public string FirstName {get;set;} 
    public string LastName {get;set;} 
} 


public class UserDto 
{ 
    public int Id {get;set;} 
    public string FirstName {get;set;} 
} 

a następująca konfiguracja mapowania:

Mapper.CreateMap<User, UserDto>() 
      .ForMember(destination => destination.FirstName, 
      options => options.MapFrom(source => source.Name.FirstName)) 

Czy jest możliwe, aby rozwiązać nazwę właściwości źródła dla podana właściwość obiektu docelowego:

coś takiego:

Assert.AreEqual(GetSourcePropertyName<User, UserDto>("FirstName"), "Name.FirstName") 

Odpowiedz

7

Ponieważ funkcja MapFrom() przyjmuje lambdę, możliwe jest, że właściwość docelowa jest odwzorowana na dowolną. Możesz użyć dowolnej lambdy, którą chcesz. Rozważ to:

.ForMember(
    destination => destination.FullName, 
    options => options.MapFrom(source => source.Name.FirstName + " " + source.Name.LastName) 
); 

bo nie jesteś zmuszony do prostych lambdy nieruchomość dostępowe, nie można zmniejszyć wyraz źródłowy do prostego Nazwa obiektu ciąg.

Jeśli MapFrom() pobierał Expression<Func<TSource, TMember>>, możliwe byłoby przekształcenie wyrażenia na ciąg znaków, ale nie można tego zrobić tak, jak jest obecnie zapisywany.

Powiązane problemy