Я формулирую пример для объяснения моего вопроса: клиент (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);
Большое спасибо за любую подсказку!