Может быть, пример поможет здесь ...
Допустим, у вас есть хорошо нормализованная схема базы данных, подобная этой:
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
в группу OrderDetailDto
для привязки данных?
Вы можете поместить конструктор в OrderDto
, который принимает OrderDetail
, и написать большой беспорядок в коде отображения. Или у вас может быть где-то класс статического преобразования. Или вы можете использовать AutoMapper и написать вместо этого:
Mapper.CreateMap<OrderDetail, OrderDetailDto>();
OrderDetailDto[] items =
Mapper.Map<OrderDetail[], OrderDetailDto[]>(orderDetails);
GridView1.DataSource = items;
Там. Мы просто взяли то, что в противном случае представляло бы собой отвратительный беспорядок бессмысленного кода отображения, и сократили его до трех строк (на самом деле только две для реального отображения).
Помогает ли это объяснить цель?