AutoMapperを使用して2つの複雑なオブジェクトインスタンスをマージする方法を理解しようとしています。AutoMapper:あるインスタンスから別のインスタンスへのコレクション内のアイテムの値の結合
public class Parent
{
public List<Child> Children { get; set; }
}
public class Child
{
public string A { get; set; }
public string B { get; set; }
public string C { get; set; }
}
私はParent
の2件のインスタンスがあります:
var parentOne = new Parent()
{
Children = new List<Child>() { new Child() { A = "A", B = "B", C = "C" } }
};
var parentTwo = new Parent()
{
Children = new List<Child>() { new Child() { C = "Updated value" } }
};
を私はせずに、parentOne
からparentTwo
に値をマージできるようにしたい親オブジェクトは、子オブジェクトのコレクションであるという性質を持っていますC
の値をparentTwo
に上書きします。次のように私が作成したマップは、次のとおりです。
Mapper.CreateMap<Parent, Parent>()
.ForMember(parent => parent.Children, opt => opt.UseDestinationValue());
Mapper.CreateMap<Child, Child>()
.ForMember(child => child.C, opt => opt.Ignore());
Mapper.Map(parentOne, parentTwo);
私はそれを理解として、あなたはUseDestinationValue()
オプションを使用しない限り、AutoMapperは複雑なプロパティの新しいインスタンスを作成します。ただし、上記のコードを実行した後、parentTwo.C
は"Updated value"
の代わりに"C"
になります。
それはList<Child>
のインスタンスを保持しているようそれは私には見えますが、それは以内リストをChild
の新しいインスタンスを作成しています。残念ながら、私はChild
の各インスタンスも保持するマップを考え出すのに苦労しています。
ご協力いただければ幸いです。
ありがとうパトリック - あなたは当然です。私がやっていることは、それぞれのリストに同じ要素があることを前提としています。それが起こっているので、これは私が取り組んでいるものの場合ですが、大部分の状況には実際には当てはまりません。私はおそらく、コレクションを適切に同期させ、AutoMapperに一致する要素のプロパティをマージさせるためにコードを完成させるでしょう。 –
ありがとうございますパトリック:私は同様の質問[ここ](http://stackoverflow.com/questions/14229798/)、あなたのコメントは "しかし、1つのリストが3つと他のリストに5がある場合は?おそらく私がやろうとしていたことは意味をなさないことが示されています。 – Merenzo