Automapperの[Ignore]オプションで問題が発生しました。Automapperは、2番目のレベルのネストされたプロパティを無視しません。
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
}
}
「無視する」オプションが完全に機能していないように見えることがあります。私が第1の「無視する」でコメントした場合、すべてが期待通りに機能します。問題は、Innerクラスにマップする必要がある他の多くのプロパティがあることです。無視する唯一のものはInnerInnerクラスです。
アイデア?同じ問題は、hereと概説されていましたが、受け入れられた答えは私のためには機能しません。
これは、文字通り5分前のことですが、これはほぼ完了したことです。 Automapperを使用して、既存のオブジェクトにマップすることができます。私は 'Inner'プロパティ全体を無視する必要がありました。次に、OuterSourceマッピングにAfterMapを追加して、必要なプロパティを取得します。 –