AutoMapper - установка строки назначения на null фактически делает ее строкой. Пусто

Со следующим отображением:

Mapper.CreateMap<ObjectA, ObjectB>()
    .ForMember(dest => dest.SomeStringProperty, opt => opt.MapFrom(src => null))

SomeStringProperty теперь пустая строка, а не нуль (как я и ожидал)

Это ошибка? Как я могу заставить его быть нулевым?

Я вижу, что opt.Ignore() сделает его нулевым, но на самом деле я хочу сделать условный нуль, как показано ниже, и приведенная выше упрощенная ошибка (?) предотвращает это

Mapper.CreateMap<ObjectA, ObjectB>()
    .ForMember(dest => dest.SomeStringProperty, opt => opt.MapFrom(src => src.SomeOtherProp != null ? src.SomeOtherProp.Prop1 : null))

person Jon Erickson    schedule 06.10.2009    source источник
comment
Я думаю, что это ошибка и пережиток первых дней разработки AutoMapper, когда я делал вещи очень устойчивыми к нулю. А пока попробуйте AllowNullDestinationValues ​​= false, а я поработаю над патчем.   -  person Jimmy Bogard    schedule 06.10.2009


Ответы (2)


Нашел настройку после просмотра исходного кода... Подтверждаю, что это не ошибка, а на самом деле настраиваемый параметр.

Когда я настраиваю свои сопоставления..

Mapper.Initialize(x =>
{
    x.AddProfile<UIProfile>();
    x.AddProfile<InfrastructureProfile>();
    x.AllowNullDestinationValues = true; // does exactly what it says (false by default)
});
person Jon Erickson    schedule 07.10.2009

вы можете определить карту для строк, используя

ITypeConverter<string, string>

и когда вы конвертируете, возвращаете ноль, если ноль. Я думаю, что это намеренно, что вы получаете пустую строку, и я даже нахожу это естественным и полезным, но я, конечно, могу ошибаться;)

Я могу предоставить более точный код, чем указано выше, по запросу, но я думаю, что вы знаете, что делаете.

person dove    schedule 06.10.2009
comment
проблема возникает из-за выражения MapFrom, когда оно получает нулевое значение, оно возвращает string.Empty. Если я реализую пользовательский TypeConverter для string -> string, он вернет null, но затем MapFrom преобразует его в string.empty. - person Jon Erickson; 06.10.2009