Помоги мне понять AutoMapper - PullRequest
       8

Помоги мне понять AutoMapper

1 голос
/ 18 февраля 2011

Какой смысл AutoMapper?Может ли кто-нибудь привести мне действительно простой пример?

Я смотрел видео на нем, но оно просто не щелкает.

Сэм

Ответы [ 3 ]

3 голосов
/ 18 февраля 2011

Обычно AutoMapper отлично подходит для отображения между объектами данных и бизнес-моделями.Например, скажем, например, у меня есть тип предметной области, назовите его PersonEntity, и у него есть массив свойств: FirstName, Surname, Gender и т. Д. Я не хочу раскрывать свои данныеот типа домена до приложения-потребителя, так что я могу определить типы бизнес-доменов, например Person, теперь тип Person может содержать дополнительную бизнес-логику, такую ​​как GetRelatedPersons и т. д., которая может не соответствовать функциональности, привязанной к вашим данным.домен.В этом случае у меня есть два типа, PersonEntity и Person, которые в какой-то момент мне придется написать шаблонный код для копирования свойств из одного в другой.Я мог бы сделать это различными способами, я мог бы:

1.Конструктор копирования:

public Person(PersonEntity entity) {

2.Общий метод картирования:

public Person CreatePerson(PersonEntity entity) {

3. Неявный/ Явное преобразование:

public static implicit operator Person(PersonEntity entity) {

Но то, что позволяет делать AutoMapper, - это легко создать процесс отображения между этими двумя типами.Таким образом, в форме simiplist я мог бы:

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

Используя подход, основанный на соглашении, среда AutoMapper преобразует соответствующие свойства из одного экземпляра в другой.Это также позволяет вам настраивать отображение типов, если вы хотите более точный контроль.

Надеюсь, это поможет.

2 голосов
/ 18 февраля 2011

скажем, у вас есть два класса

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

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

Я бы сказал, (А - это Источник, Б - это пункт назначения.)

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, надеюсь, это поможет

2 голосов
/ 18 февраля 2011

В ASP.NET MVC (поскольку вы пометили это) AutoMapper значительно облегчает задачу по сопоставлению ваших ViewModel с моделями вашего домена (например, POCO Entity Framework, классы Linq-To-Sql).

В большинстве случаев наши ViewModels содержат много сущностей, поэтому мы не можем просто сделать context.AddObject(viewModel). Обычно мы должны разбить ViewModel, сделать несколько добавлений и т. Д.

Это ручное сшивание делает ваш контроллер "толстым" , что противоположно тому, что должно быть.

Введите AutoMapper.

Здесь есть хороший / простой пример здесь из вышеперечисленного.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...