帮助我理解AutoMapper

时间:2011-02-18 00:16:21

标签: asp.net asp.net-mvc automapper

AutoMapper有什么意义?有人可以给我一个非常简单的例子吗?

我已观看了视频,但它没有点击。

萨姆

3 个答案:

答案 0 :(得分:3)

通常,AutoMapper非常适合数据实体和业务模型之间的映射。例如,比方说,我有一个数据域类型,称之为PersonEntity,它有一个属性数组:FirstNameSurnameGender等。不希望将我的数据域类型暴露给消费应用程序,因此我可以定义业务域类型,例如Person,现在Person类型可以包含其他业务逻辑,例如GetRelatedPersons等,这些逻辑可能与您的数据域无关。在这种情况下,我有两种类型,PersonEntityPerson,在某些时候我将不得不编写样板代码来将属性从一个复制到另一个。我可以通过各种方式做到这一点,我可以:

1.Copy构造函数:

public Person(PersonEntity entity) {

2.Generalised Mapping Method:

public Person CreatePerson(PersonEntity entity) {

3.Implicit / Explicit Conversion:

public static implicit operator Person(PersonEntity entity) {

但AutoMapper允许您做的事情,很容易在这两种类型之间创建一个映射过程。因此,在其simiplist形式中,我可以:

Person person = Mapper.Map<PersonEntity, Person>(entity);

通过使用约定优先方法,AutoMapper框架将匹配属性从一个实例转换为下一个实例。如果您想要更精细的控制,它还允许您自定义类型的映射方式。

希望有所帮助。

答案 1 :(得分:2)

在ASP.NET MVC中(因为你已经标记了这一点),AutoMapper使得将ViewModel映射到域模型(例如Entity Framework POCO,Linq-To-Sql类)变得更加容易。

大多数情况下,我们的ViewModel包含许多实体,因此我们不能简单地执行context.AddObject(viewModel)。通常我们必须拆分ViewModel,做多次添加等等。

这种手动拼接使你的控制器“胖”,这与它应该是相反的。

输入AutoMapper。

上面有一个很好/简单的例子here

答案 2 :(得分:2)

说你有两个班级

class A
{
  public string MyName;
  public string MyAge;
}

class B
{
  public string MyViewsName;
  public string MyViewsAge;
}

我会说,(A是来源,B是目的地。)

Map<A,B>().ForMember(dest => dest.MyViewsName, o => o.MapFrom(src => src.MyName))
          .ForMember(dest => dest.MyViewsAge, o => o.MapFrom(src => src.MyAge));

所以现在我可以拥有一个带有一些填充属性的对象A,然后说

var myBobject = MyMap.Map(MyAObject, new B());

现在,属性已映射到对象:D

如果你熟悉C ++,它是一个花哨的复制构造函数:D,希望有帮助