开发者

Help Me Understand AutoMapper

开发者 https://www.devze.com 2023-02-11 00:19 出处:网络
What is the point of AutoMapper? Could someone give me a really simple example? I have watched the video on it, but it is just n开发者_JAVA百科ot clicking.

What is the point of AutoMapper? Could someone give me a really simple example?

I have watched the video on it, but it is just n开发者_JAVA百科ot clicking.

Sam


Typically AutoMapper is great at mapping between data entities and business models. E.g., lets say for instance, I have a data domain type, call it PersonEntity, and it has an array of properties: FirstName, Surname, Gender etc. I don't want to expose my data domain type through to the consuming application, so I can define business domain types, e.g. Person, now the Person type can contain additional business logic, such as GetRelatedPersons, etc, which may not be functionality tied to your data domain. In this case, I have two types, PersonEntity and Person which at some point I will have to write boilerplate code to copy the properties from one to the other. I could do this a variety of ways, I could:

1.Copy Constructor:

public Person(PersonEntity entity) {

2.Generalised Mapping Method:

public Person CreatePerson(PersonEntity entity) {

3.Implicit/Explicit Conversion:

public static implicit operator Person(PersonEntity entity) {

But what AutoMapper allows you to do, is easily create a mapping process between those two types. So in its simiplist form, I could:

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

By using a convention-first approach, the AutoMapper framework will translate matching properties from one instance to the next. It also allows you to customise how the types are mapped if you want more fine grained control.

Hope that helps.


In ASP.NET MVC (since you've tagged that), AutoMapper makes the painful task of mapping your ViewModels to your domain models (e.g Entity Framework POCO's, Linq-To-Sql classes) much easier.

Most of the time, our ViewModels contain many entities, so we can't simply do context.AddObject(viewModel). Usually we have to break apart the ViewModel, do multiple adds, etc.

This manual stitching makes your Controller "fat", which is the opposite of what it should be.

Enter AutoMapper.

There is a good/simple example here of the above here.


say you have two classes

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

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

I would say, (A is Source, B is destination.)

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

so now I can have an object A with some filled in properties, and say

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

now the properties got mapped to the object for you :D

its a fancy copy constructor if you are familar with C++ :D, Hope that helps

0

精彩评论

暂无评论...
验证码 换一张
取 消