请告诉我Automapper呢?告诉我、Automapper

由网友(心若向阳,无畏悲伤)分享简介:什么是 Automapper 呢?它将如何帮助我的域和控制器层(asp.net MVC)What’s Automapper for? How will it help me with my domain and controller layer (asp.net mvc) 推荐答案也许一个例子将有助于在这里......

什么是 Automapper 呢?它将如何帮助我的域和控制器层(asp.net MVC)

What’s Automapper for? How will it help me with my domain and controller layer (asp.net mvc)

推荐答案

也许一个例子将有助于在这里...

Maybe an example will help here...

比方说,你有这样一个很好的规范化数据库模式:

Let's say you have a nicely-normalized database schema like this:


Orders       (OrderID, CustomerID, OrderDate)  
Customers    (CustomerID, Name)  
OrderDetails (OrderDetID, OrderID, ProductID, Qty)  
Products     (ProductID, ProductName, UnitPrice)  

和假设你正在使用一个很好的O / R映射器递给你回到一个组织良好的域模型:

And let's say you're using a nice O/R mapper that hands you back a well-organized domain model:


OrderDetail
+--ID
+--Order
|--+--Date
|--+--Customer
|-----+--ID
|-----+--Name
+--Product
|--+--ID
|--+--Name
|--+--UnitPrice
+--Qty

现在你给的要求,以显示这就是被下令在上个月的一切。要绑定这一个平面网格,所以你尽职尽责地写一个平级的绑定:

Now you're given a requirement to display everything that's been ordered in the last month. You want to bind this to a flat grid, so you dutifully write a flat class to bind:

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

这是pretty的无痛性,到目前为止,但现在该怎么办?我们如何把一堆的OrderDetail 的S成一束 OrderDetailDto 的S数据绑定?

That was pretty painless so far, but what now? How do we turn a bunch of OrderDetails into a bunch of OrderDetailDtos for data binding?

您可以把一个构造函数 OrderDto 接受一个的OrderDetail ,写的映射$ C一团糟$ C。或者你可能有一个静态转换类的地方。或者,你可以使用AutoMapper,而是写:

You might put a constructor on OrderDto that takes an OrderDetail, and write a big mess of mapping code. Or you might have a static conversion class somewhere. Or, you could use AutoMapper, and write this instead:

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

有。我们刚刚采取了哪些否则将是毫无意义的映射code令人作呕的烂摊子,降低成三条线(实际上它是两个实际映射)。

There. We've just taken what would otherwise have been a disgusting mess of pointless mapping code and reduced it into three lines (really just two for the actual mapping).

这是否有助于解释的目的是什么?

Does that help explain the purpose?

阅读全文

相关推荐

最新文章