Для чего автокартопостроитель?
Как это поможет мне с моим доменом и слоями контроллера (asp.net mvc)?
Может быть, пример поможет здесь....
Допустим, у вас есть красивая нормализованная схема базы данных, как эта:
Orders (OrderID, CustomerID, OrderDate) Customers (CustomerID, Name) OrderDetails (OrderDetID, OrderID, ProductID, Qty) Products (ProductID, ProductName, UnitPrice)
И допустим, вы используете красивый O/R mapper, который возвращает вам хорошо организованную модель домена:
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
s в кучу OrderDetailDto
s для связывания данных?
Вы можете поставить конструктор на OrderDto
, который возьмет OrderDetail
, и написать большой маппинг-код. Или у вас где-нибудь может быть статический класс преобразования. Или вы можете использовать AutoMapper и написать вместо него:
Mapper.CreateMap<OrderDetail, OrderDetailDto>();
OrderDetailDto[] items =
Mapper.Map<OrderDetail[], OrderDetailDto[]>(orderDetails);
GridView1.DataSource = items;
There. Мы просто взяли то, что в противном случае было бы отвратительным бессмысленным маппинговым кодом и сократили его до трех строк (на самом деле только две для фактического маппинга).
Это помогает объяснить цель?
Если у вас есть объект одного типа, и вы хотите заполнить свойства объекта другого типа, используя свойства с первого Введите, у вас есть два варианта:
Automapper является примером 2.
Наиболее распространенное использование состоит в том, чтобы сглаживать модели в объекты передачи данных (или, в целом, сопоставлением по границам слоя). Что очень приятно о AuthoAtpster, так это то, что для общих сценариев вам не нужно делать какие-либо конфигурации ( соглашении по конфигурации ).