2017-03-07 61 views
1

我更新我們從3版本automapper庫5.2.0版本,我就在映射設置這行代碼得到這個錯誤更新到Automapper V5有錯誤與.NullSubstitute

System.InvalidOperationException: System.InvalidOperationException: No coercion operator is defined between types 'System.String' and 'System.Int32' 

爲兩個複雜的對象。

cfg.CreateMap<objA, objB>() 
.ForAllMembers(config => config.NullSubstitute(string.Empty)); 

我猜這種情況正在發生,因爲它不能設置INT爲null,它現在是明確的它,並在automapper的V3,它只是忽略了它。有人可以證實嗎?我是否必須明確映射第5版中的每個成員類型?

對於此映射,對象具有整數,布爾值和字符串。有沒有辦法告訴它將字符串映射到String.Empty當它們爲null並忽略其他類型?

回答

3

不幸的是,這是NullSubstitute的AM5行爲,ForAllMembers也不支持篩選,並且不提供有關正在映射的成員的任何信息。

作爲一種變通方法,我建議執行手動「修復了」使用ForAllPropertyMaps方法,其允許過濾並提供必要的信息:

cfg.ForAllPropertyMaps(
    pm => "".Equals(pm.NullSubstitute) && pm.DestinationPropertyType != typeof(string), 
    (pm, m) => pm.NullSubstitute = null 
); 
+0

威爾適用於所有映射對象? –

+0

是的。 「ForAllPropertyMaps」中的「All」還有什麼意思:) –

+0

我誤解了你的答案。我以爲你的意思是刪除.ForAllMembers代碼併爲一個映射添加ForAllPropertyMaps。但是你要說離開.ForAllMembers代碼並添加這個新方法來控制NullSubstitute方法適用於每個映射的類型,而不僅僅是一個特定的映射。無論如何,這是它的工作。謝謝! –