2009-10-06 13 views
3

Avec la mise en correspondance suivante:AutoMapper - chaîne de destination réglage null permet en effet String.Empty

Mapper.CreateMap<ObjectA, ObjectB>() 
    .ForMember(dest => dest.SomeStringProperty, opt => opt.MapFrom(src => null)) 

SomeStringProperty est maintenant une chaîne vide non nulle (comme je l'attendrais)

Est-ce un bug? Comment puis-je l'obtenir pour être réellement nul?

Je vois que opt.Ignore() va rendre nulle, mais je veux vraiment faire un nul conditionnel comme ce qui suit et le bug ci-dessus simplifiée (?) Est la prévention de cette

Mapper.CreateMap<ObjectA, ObjectB>() 
    .ForMember(dest => dest.SomeStringProperty, opt => opt.MapFrom(src => src.SomeOtherProp != null ? src.SomeOtherProp.Prop1 : null)) 
+1

Je pense que cela est un bug, et une relique des premiers jours de développement AutoMapper, où je faisais des choses très nulle résistant. En attendant, essayez AllowNullDestinationValues ​​= false, et je vais travailler sur un patch. –

Répondre

6

J'ai trouvé le réglage après avoir regardé le code source ... Confirmant que ce n'est pas un bogue, mais en fait un paramètre configurable.

Lorsque je configure mes applications ..

Mapper.Initialize(x => 
{ 
    x.AddProfile<UIProfile>(); 
    x.AddProfile<InfrastructureProfile>(); 
    x.AllowNullDestinationValues = true; // does exactly what it says (false by default) 
}); 
+1

lol, pas de bogue alors. Je viens de confirmer avec un test simple. –

1

vous pouvez définir la carte pour les chaînes en utilisant

ITypeConverter<string, string> 

et lorsque vous convertissez return null si null. Je pense que c'est par conception que vous obtenez une chaîne vide et je trouve même cela naturel et utile moi-même mais je peux bien sûr me tromper;)

Je peux fournir un code plus précis que ci-dessus sur demande, mais vous savez ce que vous Faisons.

+1

Le problème provient de l'expression MapFrom, lorsque celle-ci reçoit une valeur nulle, elle renvoie string.Empty. Si j'implémente un TypeConverter personnalisé pour string -> string, il retournera null, mais alors MapFrom le convertira en string.empty. –