2016-08-02 91 views
1

我(被迫)使用AutoMapper version 1.1.0.188。我有一個基類SchufaBaseFeature和派生類SchufaFeatureAutoMapper Include無法按預期工作?

public partial class SchufaFeature : SchufaBaseFeature 
{//some code here} 

爲什麼Include沒有按照我預期的那樣工作?

這就是我與AutoMapper(映射到數據庫)來完成:

//TODO include does not work as it should! 
     Mapper.CreateMap<SchufaBaseFeature, CFSCHUFAFEATURE>() 
       .ForMember(dest => dest.FEATUREWITHOUTBIRTHDATE, opt => opt.MapFrom(src => GetSpecified(EnumToBool(src.featureWithoutBirthdate), src.featureWithoutBirthdateSpecified))) 
       .ForMember(dest => dest.OWNFEATURE, opt => opt.MapFrom(src => GetSpecified(src.ownFeature, src.ownFeatureSpecified))) 
       .Include<SchufaFeature, CFSCHUFAFEATURE>() 
      ; 

Mapper.CreateMap<SchufaFeature, CFSCHUFAFEATURE>() 
       .ForMember(dest => dest.DATE, opt => opt.MapFrom(src => GetDate(src.date))) 
       .ForMember(dest => dest.AMOUNT, opt => opt.MapFrom(src => src.amount.amount)) 
       .ForMember(dest => dest.AMOUNTCUR, opt => opt.MapFrom(src => src.amount.currency)) 
       .ForMember(dest => dest.NUMBEROFINSTALLEMENTS, opt => opt.MapFrom(src => TryParseToInt(src.numberOfInstallments))) 
       .ForMember(dest => dest.INSTALLMENTTYPE, opt => opt.MapFrom(src => src.installmentType)) 
       ; 

它是正確的映射FEATUREWITHOUTBIRTHDATE和OWNFEATURE,但包括不叫。當我運行調試器時,第二個CreateMap從不被調用。

我檢查了文檔here(AutoMapper Github繼承),我仍然不明白我在做什麼錯。可能是什麼問題?是我還是在這個版本的AutoMapper中有錯誤?

回答

1

我用.ConstructUsing解決我的問題。在AutoMapper的第一個版本中,Include沒有按預期工作,切換順序對我沒有任何幫助。以下是我的源代碼:

Mapper.CreateMap<SchufaFeature, CFSCHUFAFEATURE>() 
       .ForMember(dest => dest.FEATUREWITHOUTBIRTHDATE, opt => opt.Ignore()) 
       .ForMember(dest => dest.OWNFEATURE, opt => opt.Ignore()) 
       .ForMember(dest => dest.DATE, opt => opt.MapFrom(src => GetDate(src.date))) 
       .ForMember(dest => dest.NUMBEROFINSTALLEMENTS, opt => opt.MapFrom(src => TryParseToInt(src.numberOfInstallments))) 
       .ForMember(dest => dest.INSTALLMENTTYPE, opt => opt.MapFrom(src => src.installmentType)) 
       .ForMember(dest => dest.AMOUNT, opt => opt.Ignore()) 
       .AfterMap((dto, cfschufafeature) => { Mapper.Map(dto.amount, cfschufafeature); }) 
      ; 

     Mapper.CreateMap<SchufaTextFeature, CFSCHUFAFEATURE>() 
       .ForMember(dest => dest.FEATUREWITHOUTBIRTHDATE, opt => opt.Ignore()) 
       .ForMember(dest => dest.OWNFEATURE, opt => opt.Ignore()) 
      ; 

     //include does not work in this AutoMapper version as expected, that is why we use ConstructUsing 
     Mapper.CreateMap<SchufaBaseFeature, CFSCHUFAFEATURE>() 
       .ConstructUsing(feature => 
       { 
        var schufaFeature = feature as SchufaFeature; 
        var schufaTextFeature = feature as SchufaTextFeature; 
        CFSCHUFAFEATURE result = new CFSCHUFAFEATURE(); 

        if (schufaFeature != null) 
         Mapper.Map(schufaFeature, result); 

        if (schufaTextFeature != null) 
         Mapper.Map(schufaTextFeature, result); 

        return result; 
       }) 
       .ForMember(dest => dest.FEATUREWITHOUTBIRTHDATE, opt => opt.MapFrom(src => GetSpecified(EnumToBool(src.featureWithoutBirthdate), src.featureWithoutBirthdateSpecified))) 
       .ForMember(dest => dest.OWNFEATURE, opt => opt.MapFrom(src => GetSpecified(EnumToBool(src.ownFeature), src.ownFeatureSpecified))) 
      ; 
1

您可能需要切換您創建地圖的順序。 Include包含一個....功能,用於檢查現有地圖的配置。如果該現有地圖尚未存在,則需要切換訂單。

這一切都是固定的,當然5.0,但你堅持:)

+0

我會在幾天內檢查此問題... – Devid

+0

我無法解決包含問題。即使玩命令也會得到同樣的結果。 – Devid