目标属性为null

时间:2019-04-11 20:18:07

标签: automapper

我举一个例子来解释我的问题: 客户端(Angular)接收到一个PersonDto,其属性Address为null。现在,Address属性设置为AddressDto的实例,然后发送回服务器。在服务器上,接收到的PersonDto(源)的属性地址不同于null,我想将其映射到Person实体(目标)。但是目标仍然具有一个为null的Address属性。在映射期间,我希望automapper执行以下操作:

该源具有Address属性的新设置值(Id = 0)。 目标的Address属性的值仍为null。 在映射期间,我希望自动映射器为目标的Address属性创建一个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);

非常感谢您的提示!

0 个答案:

没有答案