Automapper忽略了嵌套对象的ignore属性。

3

我有一个Order对象,其中包含一系列的OrderLine对象,还有一个OrderVm对象,其中包含一系列的OrderLineVm对象。 OrderLine对象拥有一个在OrderLineVm对象中不存在的ValueB字段。

我的问题是,尽管我告诉AutoMapper忽略这个属性,但它仍会将ValueB设置为null:

[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>();
        }
    }
}

我缺少什么?

不一定是忽略,但也许这个问题会有所帮助 https://dev59.com/12jWa4cB1Zd3GeqPrHwz?rq=1 - Steve Mitcham
1个回答

2
在创建地图时添加一个额外的映射,从列表到列表,然后它就可以工作了。
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());

2
只是一个提示 - 在集合上,默认情况下,AutoMapper会事先清除它们。但是使用这种方法,AutoMapper不会这样做。 - Jimmy Bogard

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接