我想弄清楚如何使用AutoMapper合併兩個複雜的對象實例。父對象有一個屬性是子對象的集合: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
兩個實例:
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
,不在parentTwo
中覆蓋C
的值。是我所創建的映射如下:
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);
據我瞭解,AutoMapper將除非你使用UseDestinationValue()
選項來創建複雜屬性的新實例。但是,執行上面的代碼後,parentTwo.C
等於"C"
而不是"Updated value"
。
在我看來,它保留了List<Child>
的實例,但它在列表中創建了Child
的新實例。不幸的是,我正在努力想出一張地圖,以保持每個實例Child
。
任何幫助將不勝感激!
謝謝帕特里克 - 你當然很對。我在做什麼,假設每個列表中都有相同的元素。事情發生的時候,我正在處理的是這種情況,但我認爲這對大多數情況並不適用。我可能會充實我的代碼以保持集合同步,並使AutoMapper爲匹配的元素合併屬性。 – 2012-03-20 09:27:49
謝謝帕特里克:我有一個類似的問題[這裏](http://stackoverflow.com/questions/14229798/)和你的評論「但是如果一個列表有3個,另一個列表有5個呢?已經說明我想做的事可能沒有意義。 – Merenzo 2013-01-09 09:19:32