Asp.net

Automapper 有什麼用?

  • January 19, 2010

Automapper有什麼用?

它將如何幫助我處理我的域和控制器層(asp.net mvc)?

也許一個例子在這裡會有所幫助……

假設您有一個很好的標準化數據庫模式,如下所示:

訂單(OrderID、CustomerID、OrderDate) 
客戶(客戶 ID、姓名) 
OrderDetails(OrderDetID、OrderID、ProductID、Qty) 
產品(ProductID、ProductName、UnitPrice) 

假設您正在使用一個很好的 O/R 映射器,它可以為您提供一個組織良好的域模型:

訂單詳情
+--身份證
+--訂購
|--+--日期
|--+--客戶
|-----+--標識
|-----+--Name
+--產品
|--+--ID
|--+--Name
|--+--單價
+--數量

現在,您需要顯示上個月訂購的所有商品。你想把它綁定到一個平面網格,所以你盡職盡責地編寫一個平麵類來綁定:

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; }
   }
}

到目前為止,這很無痛,但現在呢?我們如何將一堆OrderDetails 變成一堆OrderDetailDtos 進行數據綁定?

您可能會在其上放置一個建構子OrderDtoOrderDetail並編寫一大堆映射程式碼。或者您可能在某處有一個靜態轉換類。或者,您可以使用 AutoMapper,並改為:

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

那裡。我們剛剛採用了原本會令人作嘔的毫無意義的映射程式碼,並將其縮減為三行(實際上只有兩行用於實際映射)。

這有助於解釋目的嗎?

引用自:https://stackoverflow.com/questions/2090915