Подтвердить что ты не робот

Для чего нужен Automapper?

Что означает Automapper для? Как это поможет мне с моим доменом и уровнем контроллера (asp.net mvc)

4b9b3361

Ответ 1

Может быть, пример поможет здесь...

Скажем, у вас хорошо подобранная схема базы данных:

Orders       (OrderID, CustomerID, OrderDate)  
Customers    (CustomerID, Name)  
OrderDetails (OrderDetID, OrderID, ProductID, Qty)  
Products     (ProductID, ProductName, UnitPrice)  

И позвольте сказать, что вы используете хороший модуль O/R, который возвращает вам хорошо организованную модель домена:

OrderDetail
+--ID
+--Order
|--+--Date
|--+--Customer
|-----+--ID
|-----+--Name
+--Product
|--+--ID
|--+--Name
|--+--UnitPrice
+--Qty

Теперь вам нужно предъявить все, что было заказано за последний месяц. Вы хотите привязать это к плоской сетке, так что вы послушно напишите плоский класс для привязки:

public class OrderDetailDto
{
    public int ID { get; set; }
    public DateTime OrderDate { get; set; }
    public int OrderCustomerID { get; set; }
    public string OrderCustomerName { get; set; }
    public int ProductID { get; set; }
    public string ProductName { get; set; }
    public Decimal ProductUnitPrice { get; set; }
    public int Qty { get; set; }

    public Decimal TotalPrice
    {
        get { return ProductUnitPrice * Qty; }
    }
}

До сих пор это было довольно безболезненно, но что теперь? Как мы превращаем связку OrderDetail в связку OrderDetailDto для привязки данных?

Вы можете поместить конструктор в OrderDto, который принимает OrderDetail, и напишет большой беспорядок кода отображения. Или у вас может быть класс статического преобразования. Или вы можете использовать AutoMapper, и вместо этого напишите:

Mapper.CreateMap<OrderDetail, OrderDetailDto>();
OrderDetailDto[] items =
    Mapper.Map<OrderDetail[], OrderDetailDto[]>(orderDetails);
GridView1.DataSource = items;

Там. Мы только что взяли то, что в противном случае было бы отвратительным беспорядком бессмысленного картографического кода и уменьшило его на три строки (на самом деле это всего лишь два для фактического отображения).

Помогает ли это объяснить цель?

Ответ 2

Если у вас есть объект одного типа и вы хотите заполнить свойства объекта другого типа, используя свойства первого типа, у вас есть два варианта:

  • Вручную написать код для такого сопоставления.
  • Используйте инструмент, который автоматически обработает это для вас.

AutoMapper является примером 2.

Наиболее частое использование заключается в сглаживании моделей в объекты передачи данных (или, в общем, отображение через границы слоев). Что очень приятно в AutoMapper, так это то, что для обычных сценариев вам не нужно настраивать (соглашение по конфигурации).

Ответ 3

Сопоставление объектов между слоями. Хороший пример: Здесь