2010-08-04 12 views
8

Est-il possible de configurer AutoMapper pour renvoyer une nouvelle instance du type de destination si l'objet source est null?AutoMapper: créer une instance de type de destination si source == null

Source source = null; 
Dest d1 = AutoMapper.Mapper.Map<Source, Dest>(source); 
// d1 == null 

// I'm looking for a way to configure AutoMapper to 
// eliminate this code: 
Dest d2 = AutoMapper.Mapper.Map<Source, Dest>(source) ?? new Dest(); 
+0

envelopper dans une méthode ou quelque chose – Omu

Répondre

15

répondre à ma propre question (en partie):

AutoMapper possède une propriété de configuration nommé AllowNullDestinationValues qui est réglé sur true par défaut. En réglant ce paramètre false, je reçois le comportement montré dans la question, par exemple:

Mapper.Configuration.AllowNullDestinationValues = false; 

//... 

Source source = null; 
Dest d = AutoMapper.Mapper.Map<Source, Dest>(source); 
// d is now a new instance of Dest 

Cette solution fonctionne bien pour les types simples, où la source et le type de destination cartographient bien. J'ai encore quelques problèmes avec les mappages complexes (je vais mettre à jour la question pour montrer un exemple).

2

Vous pouvez également utiliser .NullSubstitute() pour remplacer la valeur NULL à une valeur personnalisée pour toute propriété dans Automapper, .: par exemple

CreateMap<SMModel, VM_SMModel>() 
        .ForMember(d => d.myDate, o => o.NullSubstitute(new DateTime(2017,12,12)));