Возникли проблемы с опцией Automapper 'Ignore'. Вот тест с описанием проблемы, с которой я столкнулся:
using AutoMapper;
using NUnit.Framework;
[TestFixture]
public class Sample
{
public class OuterSource
{
public InnerSource Inner { get; set; }
}
public class InnerSource
{
public InnerInnerSource InnerInner { get; set; }
}
public class InnerInnerSource
{
public int Value { get; set; }
}
public class OuterDest
{
public InnerDest Inner { get; set; }
}
public class InnerDest
{
public InnerInnerDest InnerInner { get; set; }
}
public class InnerInnerDest
{
public int Value { get; set; }
}
[Test]
public void MergeMap_WhenIgnoringLevel2InnerProperty_PropertyRemainsUnchanged()
{
Mapper.CreateMap<OuterSource, OuterDest>();
//.ForMember(d => d.Inner, opts => opts.Ignore()); // test passes when added back in
Mapper.CreateMap<InnerSource, InnerDest>()
.ForMember(d => d.InnerInner, opts => opts.Ignore());
var source = new OuterSource { Inner = new InnerSource { InnerInner = new InnerInnerSource { Value = 25 } } };
var destination = new OuterDest { Inner = new InnerDest { InnerInner = new InnerInnerDest { Value = 99 } } };
Mapper.Map(source, destination);
Assert.That(99 == destination.Inner.InnerInner.Value); // FAIL - destination.Inner.InnerInner is null
}
}
Похоже, опция игнорирования работает не полностью. Если я прокомментирую в первом «игнорировать», то все будет работать, как ожидалось. Проблема в том, что во внутреннем классе есть ряд других свойств, которые мне нужно сопоставить. Единственный, что нужно игнорировать, это класс InnerInner.
Есть идеи? Та же проблема, я думаю, была изложена здесь , но принятый ответ не работает для меня.