конфигурация автоматического преобразователя для свойства назначения null - PullRequest
0 голосов
/ 11 апреля 2019

Я формулирую пример для объяснения моего вопроса: клиент (Angular) получает PersonDto со свойством Address, которое имеет значение null.Теперь свойство Address установлено в экземпляр AddressDto и отправлено обратно на сервер.На сервере PersonDto (источник) получен с адресом свойства, отличным от нуля, и я хочу привязать его к объекту персоны (пункт назначения).НО пункт назначения все еще имеет свойство Address, которое является нулевым.Во время отображения я хочу, чтобы autopper сделал следующее:

у источника есть новое значение для свойства Address (Id = 0).назначение все еще имеет значение null в свойстве Address.Во время сопоставления я хочу, чтобы autopper создавал новый экземпляр Address для свойства Address целевого объекта и отображал значения свойства Address из источника.

С моей конфигурацией в этот момент я получаю «Типы отображения ошибок». Но если свойство адреса назначения уже имеет значение, отображение работает нормально.

Вот код:

Мои модели и DTO:

public class Person
   {
       public int Id{ get; set; }
       public string Name { get; set; }
       public Address Address { get; set; }
   }

public class PersonDto
   {
       public int Id{ get; set; }
       public string Name { get; set; }
       public AddressDto Address { get; set; }
   }

public class Address
   {
       public int Id{ get; set; }
       public string Street { get; set; }
   }

public class AddressDto
   {
       public int Id{ get; set; }
       public string Street { get; set; }
   }

Настройка автомаппера:

var config = new MapperConfiguration(cfg =>
               {
                   cfg.AllowNullDestinationValues = true;
                   cfg.AddCollectionMappers();

                   cfg.CreateMap<PersonDto, Person>()
                       .EqualityComparison((odto, o) => odto.Id == o.Id)

                       .ForMember(d => d.FirstName, o => o.MapFrom(s => s.FirstName))
                       .ForMember(d => d.Address, o => o.MapFrom(s => s.Address))


                   cfg.CreateMap<AddressDto, Address>()
                       .EqualityComparison((odto, o) => odto.Id == o.Id)
                       .ForMember(d => d.Street, o => o.MapFrom(s => s.Street))
                   ;
});


               var personDto = new PersonDto();
               personDto.FiscalAddress = new AddressDto();
               personDto.FiscalAddress.street = "Teststreet";

               var person = new Person();

               // I leave person.Address as null

   IMapper iMapper = config.CreateMapper();
               iMapper.Map(itemFromClient, _Query);

Большое спасибо за любую подсказку!

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