2017-03-17 155 views
1

我在我的ASP.NET MVC應用程序中使用AutoMapper 6.0在實體和視圖模型之間進行映射。實體正在使用字節[8]版本屬性,但視圖模型正在使用ulong版本屬性。由於不同的屬性類型,默認映射將忽略該字段,並以視圖模型的默認值(即0)結束。所有映射的自定義AutoMapper名稱/類型約定?

目前,我在每個_mapper.Map(entity,viewModel)之後調用下面的代碼:

_mapper.Map(entity,viewModel); 
viewModel.Version = System.BitConverter.ToUInt64(entity.Version.ToArray(), 0); 

如何在初始化期間配置AutoMapper,以便不需要第二行?

我有上百個車型所以不是用ForMember(CFG)配置中創建自定義地圖,我想修改AutoMapper約定,以便上述轉換的類型發生在默認情況下爲每個地圖,如:

public class MyCustomProfile : AutoMapper.Profile 
{ 
    public MyCustomProfile() 
    { 
     CreateMissingTypeMaps = true; 
     //use custom converter for this convetion: ulong vVersion = BitConverter.ToUInt64(eVersion.ToArray(), 0); 
    } 
} 

回答

1

你可以嘗試類型映射與ConvertUsing:

CreateMap<byte, ulong>().ConvertUsing(System.Convert.ToUInt64); 

編輯的要求:

CreateMap<byte[], ulong>().ConvertUsing(x=> BitConverter.ToUInt64(x, 0)); 
+0

幾乎完美!謝謝!你已經解決了這個謎題。 你能否用上面例子的正確代碼來編輯你的答案? CreateMap ()。ConvertUsing(x => BitConverter.ToUInt64(x,0));謝謝! – komsky