帮助我了解AutoMapper(Help Me Understand AutoMapper)

2019-09-29 08:58发布

什么是AutoMapper点? 可能有人给我一个非常简单的例子吗?

我看过它的视频,但它只是不点击。

山姆

Answer 1:

通常AutoMapper是在数据实体和商业模式之间的映射很大。 例如,可以说,例如,我有一个数据域类型,称之为PersonEntity ,并且它具有属性的数组: FirstNameSurnameGender等。我不想公开我的数据域通过键入到消费应用程序,这样我就可以定义业务域类型,例如Person ,现在Person类型可以包含其他业务逻辑,如GetRelatedPersons等,这可能不被功能与您的数据域。 在这种情况下,我有两种类型, PersonEntityPerson这在某些时候我会写样板代码的特性从一个到另一个复制。 我可以这样做多种方式,我可以:

1.复印构造函数:

public Person(PersonEntity entity) {

2.Generalised映射方法:

public Person CreatePerson(PersonEntity entity) {

3.Implicit /显式转换:

public static implicit operator Person(PersonEntity entity) {

但是AutoMapper允许你这样做,是很容易地创建这两种类型之间的映射过程。 因此,在其simiplist形式,我可以:

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

通过使用约定优先的方法,该AutoMapper框架将转化匹配从一个实例到下一个属性。 它还可以让你自定义如何,如果你想要更多的细粒度控制的类型映射。

希望帮助。



Answer 2:

在ASP.NET MVC(因为你已经标记的是),AutoMapper使得映射你的的ViewModels到您的域模型的痛苦任务(如实体框架POCO的,LINQ到SQL类)容易得多。

大多数时候,我们的ViewModels包含很多实体,所以我们不能简单地做context.AddObject(viewModel) 。 通常我们必须掰开视图模型,做多的增加,等等。

本手册拼接让你的控制器“胖”,这是它应该是什么相反。

输入AutoMapper。

这是一个很好/简单的例子, 在这里在这里以上。



Answer 3:

假设你有两个班

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

所以现在我可以有一些填充属性的对象,并说

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

现在的属性得到映射到对象为您提供:d

其看中的拷贝构造函数,如果您熟悉C ++:d,希望帮助



文章来源: Help Me Understand AutoMapper