2012-07-02 2 views
1

Nous utilisons Automapper pour mapper nos entités (de EF/base de données) pour afficher les modèles. Notre projet traite d'une entité qui a une relation avec une classe appelée Classification, qui possède un ensemble de propriétés ayant chacune une propriété DisplayName.Ajout de votre propre règle de nommage Automapper

Chaque fois que nous avons un modèle de vue comme celui-ci:

public class PersonViewModel{ 
    public string Nationality{get;set;} 
    public string Gender {get;set;} 
    public string HairColour {get;set;} 
} 

Et notre entité peut être (ce n'est pas un exemple réel)

public class Person { 
    public Classification Classification {get;set;} 
    public string Name {get;set;} 
} 

public class Classification { 
    public Gender Gender {get;set;} 
    public HumanHairColour HairColour {get;set;} 
    public Nationality Nationality {get;set;} 
} 

et chacune des catégories de biens à l'intérieur Classification a une DisplayName propriété comme

public class Gender { 
    public string DisplayName { get; set; } 
    public int Id { get; set; } 
} 

public class Nationality { 
    public string DisplayName { get; set; } 
    //... 
} 

public class HumanHairColour { 
    public string DisplayName { get; set; } 
    //... 
} 

Maintenant nous devons manuel Ajoutez des mappages pour chacune des propriétés sur le PersonViewModel sauf si je veux le nommer ClassificationNationalityDisplayName ou quelque chose d'idiot comme ça.

Est-il possible d'ajouter une sorte de règle dans notre Automapper configuration pour lui demander de vérifier la classe Classification pour les propriétés des noms similaires, puis de mapper à une chaîne utiliser son DisplayName?

+0

Ne serait-'Mapper.CreateMap (). ForMember (dest => dest.Nationality, opt => opt.MapFrom (src => src.Classification.Nationality.DisplayName)) 'travail? – Soliah

+0

oui qui le mappe, nous l'utilisons pour le moment, mais je dois le faire pour chaque propriété sur chaque modèle de vue à travers mon application, j'espérais en faire une règle globale – RodH257

Répondre

0

Vous pouvez renommer les propriétés dans votre viewmodel à:

public class PersonViewModel { 
    public string NationalityDisplayName { get; set; } 
    public string GenderDisplayName { get; set; } 
    public string HairColourDisplayName { get; set; } 
} 

Alors Automapper cartographiera tout correctement avec:

Mapper.CreateMap<Person, PersonViewModel>(); 
+0

n'aurais-je pas besoin de le nommer ClassificationNationalityDisplayName? Ce qui est un peu trop long pour moi – RodH257

+0

Désolé, oublie ça. Je n'ai pas très bien lu votre question. –

+0

pas de soucis, merci pour votre réponse de toute façon! – RodH257

Questions connexes