2012-07-02 3 views
1

Мы используем Automapper для отображения наших объектов (из EF/database) для просмотра моделей. Наш проект имеет дело с сущностью, которая имеет отношение к классу с именем Classification, который имеет кучу свойств, каждый из которых имеет свойство DisplayName.Добавление собственного правила именования Automapper

Всякий раз, когда у нас есть модель представления, как это:

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

И наша компания может быть (это не реальный пример)

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;} 
} 

и каждый из классов свойств внутри Classification имеет DisplayName имущество, подобное

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; } 
    //... 
} 

Сейчас у нас есть руководство ly добавлять сопоставления для каждого из свойств на PersonViewModel, если я не хочу называть его ClassificationNationalityDisplayName или что-то глупое подобное.

Можно ли добавить какую-то правила в нашей Automapper установки, чтобы спросить его, чтобы проверить Classification класс для свойств подобных имен, а затем отобразить его в строку использовать его DisplayName?

+0

Не был бы 'Mapper.CreateMap (). ForMember (dest => dest.Nationality, opt => opt.MapFrom (src => src.Classification.Nationality.DisplayName)) 'work? – Soliah

+0

Да, это отображает его, мы используем это на данный момент, но я должен сделать это для каждого свойства в каждой модели представления в моем приложении, я надеялся сделать это глобальным правилом – RodH257

ответ

0

Вы можете переименовать свойства в вашем ViewModel для:

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

Тогда Automapper корректно отобразить все с:

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

, не нужно было бы его называть ClassificationNationalityDisplayName? Который слишком длинный для меня – RodH257

+0

Извините, забудьте об этом. Я не очень хорошо читал ваш вопрос. –

+0

не заботится, спасибо за ваш ответ в любом случае! – RodH257

Смежные вопросы