2016-08-02 7 views
1

Ich (bin gezwungen) AutoMapper version 1.1.0.188 zu verwenden. Ich habe eine Basisklasse SchufaBaseFeature und eine abgeleitete Klasse SchufaFeature.AutoMapper Include funktioniert nicht wie erwartet?

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

Warum funktioniert Include nicht so, wie ich es erwarten würde?

Dies ist, was ich mit AutoMapper (Mapping zu DataBase) getan haben:

//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)) 
       ; 

Es ist richtig abbildet FEATUREWITHOUTBIRTHDATE und OWNFEATURE, aber die Include nicht genannt wird. Wenn ich den Debugger starte, wird die zweite CreateMap nie aufgerufen.

Ich habe die Dokumentation here (AutoMapper Github Vererbung) überprüft und ich kann immer noch nicht verstehen, was ich falsch mache. Was könnte das Problem sein? Ist es mir oder gibt es einen Bug in dieser Version von AutoMapper?

Antwort

1

ich mein Problem gelöst durch .ConstructUsing verwenden. In der ersten Version von AutoMapper funktioniert das Einschließen nicht wie erwartet, das Wechseln der Reihenfolge hat nichts für mich getan. Unten ist mein Quellcode:

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

Möglicherweise müssen Sie die Reihenfolge ändern, in der Sie Karten erstellen. Include verfügt über eine .... Funktion, mit der vorhandene Karten auf ihre Konfiguration überprüft werden. Wenn diese vorhandene Karte noch nicht vorhanden ist, müssen Sie die Reihenfolge wechseln. Dies alles wird in 5.0 natürlich feste

aber Sie stecken :)

+0

Ich werde dies in ein paar Tagen überprüfen ... – Devid

+0

Ich konnte das Problem mit Include nicht lösen. Selbst das Spielen mit der Reihenfolge bringt mir immer das gleiche Ergebnis. – Devid

Verwandte Themen