1
我正在使用Automapper,我想知道是否有可能將源集合中的所有項目添加到目標。添加項目到新的集合,而不是替換整個集合
考慮以下幾點:
public class A { public IDictionary<int, string> myDictionary = new Dictionary<int, string>(); }
public class B { public IDictionary<int, string> myDictionary = new Dictionary<int, string>(); }
然後創建的映射:
Mapper.CreateMap<A, B>();
,做實際映射:
Mapper.Map<A, B>(instanceOfA);
我相信屏幕後面會出現這種情況:
newInstanceOfB.myDictionary = instanceOfA.myDictionary
但是,它可以告訴Automapper做到這一點(也許有東西自定義轉換器...):
foreach (var item in instanceOfA.myDictionary)
newInstanceOfB.myDictionary[item.Key] = item.Value
嗨博卡, 感謝您的回覆,但它不會做的伎倆。我將一個DTO對象映射到來自NHibernate的Domain對象。 AutoMapper不僅會更改集合中的項目,還會更改集合本身。如果我忽略映射中的集合並手動添加/刪除一個對象到另一個對象(使用foreach即可),它可以正常工作。我只是想知道你是否可以在Automapper中做到這一點,但我猜測它不能完成:-( – blenaerts
我不確定我是否遵循。在我的答案中,我能夠映射集合創建新項目。看不出爲什麼這對於DTO和Nhibernate實體不起作用,你可以像上面那樣用ResolveUsing來完成,或者你可以像你說的那樣忽略它,然後用AfterMap子句進行映射 – boca
正確但是在由Automapper改變了類B的myDictionary的哈希碼的例子,因爲它總是返回一個新的字典(我檢查過源代碼;-))。所以NHibernate不會保存域對象,因爲它看到原來的字典被改變了。我設法通過製作一個以Automapper地圖開始的幫助方法來解決問題,然後通過反射進行項目的複製。 – blenaerts