Automapper 忽略嵌套对象的 ignore 属性

Automapper ignores the ignore property for nested object

我有一个包含 OrderLine 对象列表的 Order 对象和一个包含 OrderLineVm 对象列表的 OrderVm 对象。 OrderLine 对象有一个在 OrderLineVm 对象中不存在的 ValueB 字段。

我遇到的问题是 ValueB 被 AutoMapper 设置为空,即使我告诉它忽略这个 属性:

[TestFixture]
public class AutomapperDestinationIssueTest2
{
    [Test]
    public void OrderLineValueBShouldNotBeNull()
    {
        Mapper.CreateMap<OrderVm, Order>().ForMember(dest => dest.Lines, opt => opt.UseDestinationValue());
        Mapper.CreateMap<OrderLineVm, OrderLine>()
            .ForMember(dest => dest.ValueB, opts => opts.Ignore());

        var orderVm = new OrderVm() { Id = 1 };
        orderVm.Lines.Add(new OrderLineVm() { ValueA = "New ValueA"} );
        var order = new Order() { Id = 1 };
        order.Lines.Add(new OrderLine() { ValueA = "Old ValueA", ValueB = "Old ValueB " });

        Mapper.Map(orderVm, order);
        Assert.IsNotNull(order.Lines[0].ValueB); // Fails.  ValueB is null here.
    }

    public class OrderLine
    {
        public string ValueA { get; set; }
        public string ValueB { get; set; }
    }

    public class OrderLineVm
    {
        public string ValueA { get; set; }
    }

    public class Order
    {
        public int Id { get; set; }
        public List<OrderLine> Lines { get; set; }

        public Order()
        {
            Lines = new List<OrderLine>();
        }
    }

    public class OrderVm
    {
        public int Id { get; set; }
        public List<OrderLineVm> Lines { get; set; }
        public OrderVm()
        {
            Lines = new List<OrderLineVm>();
        }
    }
}

我错过了什么?

为您的地图创建添加一个额外的映射,地图从一个列表到另一个列表,它开始工作。

Mapper.CreateMap<OrderVm, Order> ().ForMember(dest => dest.Lines, opt => opt.UseDestinationValue());
Mapper.CreateMap<List<OrderLineVm>,List<OrderLine>> ();
Mapper.CreateMap<OrderLineVm, OrderLine> ().ForMember (d => d.ValueB, opt => opt.Ignore());