添加自己的Automapper命名规则

时间:2012-07-02 07:48:07

标签: c# asp.net-mvc automapper

我们使用Automapper将我们的实体(从EF /数据库)映射到视图模型。我们的项目涉及与名为Classification的类有关系的实体,该类具有一堆属性,每个属性都具有DisplayName属性。

每当我们有这样的视图模型时:

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

现在我们必须手动为PersonViewModel上的每个属性添加映射,除非我想将其命名为ClassificationNationalityDisplayName或类似的东西。

是否可以在我们的Automapper设置中添加某种规则,要求它检查Classification类中是否有类似名称的属性,然后将其映射到字符串使用其DisplayName 1}}?

1 个答案:

答案 0 :(得分: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>();