Сохранить нулевое значение при отображении - не создавать значения по умолчанию для типа - PullRequest
2 голосов
/ 15 апреля 2019

Как я могу заставить AutoMapper сохранять нулевое значение из источника?

new MapperConfiguration(cfg => cfg.CreateMap<MyModel, MyModel>()
    .ForMember(m => m.prop1, opt => opt.AllowNull())
    .ForMember(m => m.prop1, opt => opt.NullSubstitute(null))
    .ForMember(m => m.prop1, opt => opt.MapFrom(s => s.prop1))
).CreateMapper();

prop1 допускает обнуление, например, string[]

Я всегда получаю значение по умолчанию для типа.

Ответы [ 3 ]

2 голосов
/ 15 апреля 2019

Попробуйте

AutoMapper.Mapper.Initialize(c =>
{
    c.AllowNullCollections = true;
});
2 голосов
/ 15 апреля 2019

Документация автопроизводителя гласит:

При отображении свойства коллекции, если исходное значение равно нулю AutoMapper отобразит поле назначения в пустую коллекцию вместо установки целевого значения в ноль. Это соответствует поведение Entity Framework и Руководства по разработке структуры, которые верьте C # ссылки, массивы, списки, коллекции, словари и IEnumerables НИКОГДА не должны быть нулевыми, никогда.

Вы можете изменить его, используя AllowNullCollections свойство:

Mapper.Initialize(cfg => {
    cfg.AllowNullCollections = true;
    cfg.CreateMap<Source, Destination>();
});
2 голосов
/ 15 апреля 2019

Null целевые значения и null коллекции не разрешены по умолчанию. Вы можете установить это в конфигурации:

configuration.AllowNullCollections = true;
configuration.AllowNullDestinationValues = true;

Вы также можете форсировать это через AfterMap конфигурацию:

new MapperConfiguration(cfg => cfg.CreateMap<MyModel, MyModel>()
   .AfterMap( (s,d) => d.prop1 = s.prop1 == null ? null : d.prop1 );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...