AutoMapper-从具有子集合的ViewModel映射到具有子集合的现有模型

时间:2018-10-03 16:49:59

标签: c# asp.net automapper

//entities
class Order
    int Id
datetime OrderDate 
string SomeOtherOrderProp // I dont need to update but it has a value
    List<Detail> Details

class Detail
    int Id 
    decimal Quantity
string SomeOtherDetailProp // I dont need to update but it has a value

//DTO's
class OrderDTO
    int Id
datetime OrderDate
    List<DetailDTO> DetailsDTO

class DetailDTO
    int Id
    decimal Quantity

我需要从OrderDTO映射到现有订单。

为此,我定义了两个映射:

        CreateMap<OrderDTO, Order>()
            .ForMember(dest => dest.Details, opt => opt.MapFrom(src => src.DetailsDTO))

        CreateMap<DetailDTO, Detail>()

然后我得到我现有的订单。

var order = GetOrderById(int id); 

最后,当我这样做

_mapper.Map(orderDto, order), 

将所有orderDTO属性转移到我现有的订单属性中,就可以了。

OrderDto.Id被映射到Order.Id。

OrderDTO.OrderDate到Order.OrderDate,

,它保留了Order.SomeOtherOrderProp属性的原始值,这正是我想要和期望的。

但是,子集合属性Details Details SomeOtherDetailProp不会保留其值。 例如,Detail.SomeOtherDetailProp会将其现有值设置为null,因为我的DetailDTO没有该属性。

问题: 对于顶层对象,它保留了SomeOtherOrderProp,但是在子集合中它重写了SomeOtherDetailProp。我该怎么做才能保留SomeOtherDetailProp的原始值?

0 个答案:

没有答案