.net – 什么是Automapper?

什么是 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; }
    }
}

到目前为止这是非常痛苦的,但是现在呢?我们如何将一堆OrderDetails转换成一堆OrderDetailDtos进行数据绑定?

您可以在OrderDto上放置一个构造函数,该构造函数需要一个OrderDetail,并写出一大堆映射代码。或者你可能在某处有一个静态转换类。或者,您可以使用AutoMapper,并写入:

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

那里。我们刚刚采取了一个令人厌恶的无意义的映射代码混乱,并将其简化为三行(实际映射中只有两个)。

这有助于解释目的吗?

相关文章

这篇文章主要讲解了“WPF如何实现带筛选功能的DataGrid”,文...
本篇内容介绍了“基于WPF如何实现3D画廊动画效果”的有关知识...
Some samples are below for ASP.Net web form controls:(fr...
问题描述: 对于未定义为 System.String 的列,唯一有效的值...
最近用到了CalendarExtender,结果不知道为什么发生了错位,...
ASP.NET 2.0 page lifecyle ASP.NET 2.0 event sequence cha...