Automapper: разрешить имя свойства источника из автоматизированного объекта - PullRequest
5 голосов
/ 20 июня 2011

Учитывая следующие классы:

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;}
}

И следующую конфигурацию сопоставления:

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

Возможно ли разрешить имя свойства источника для данного свойства в месте назначенияобъект:

что-то вроде:

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

1 Ответ

7 голосов
/ 08 декабря 2011

Поскольку MapFrom () принимает лямбду, возможно, что свойство назначения сопоставлено с чем-либо. Вы можете использовать любую лямбду, какую захотите. Учтите это:

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

Поскольку вы не обязаны создавать лямбда-выражения для простых свойств, вы не можете уменьшить выражение источника до простой строки имени свойства.

Если бы MapFrom () занял Expression<Func<TSource, TMember>>, можно было бы превратить выражение в строку, но это невозможно сделать так, как оно написано в настоящее время.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...