Для чего нужен Automapper?
Как это поможет мне с моими уровнями домена и контроллера (asp.net mvc)?
Для чего нужен Automapper?
Как это поможет мне с моими уровнями домена и контроллера (asp.net mvc)?
Может быть, здесь поможет пример ...
Допустим, у вас есть хорошо нормализованная схема базы данных, подобная этой:
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;
Там. Мы только что взяли то, что в противном случае было бы отвратительным беспорядком бессмысленного кода сопоставления, и сократили его до трех строк (на самом деле только две для фактического сопоставления).
Это помогает объяснить цель?
Если у вас есть объект одного типа и вы хотите заполнить свойства объекта другого типа, используя свойства первого типа, у вас есть два варианта:
AutoMapper - это пример 2.
Чаще всего используется для сглаживания моделей в объекты передачи данных (или, в общем, для сопоставления границ слоев). Что очень хорошо в AutoMapper, так это то, что для распространенных сценариев вам не нужно выполнять какую-либо настройку (соглашение о конфигурации < / а>).