Qui*_*Par 18 .net asp.net asp.net-mvc automapper
什么是Automapper?
它对我的域和控制器层(asp.net mvc)有什么帮助?
Aar*_*ght 30
也许一个例子可以帮助...
假设你有一个很好的规范化数据库模式,如下所示:
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; }
}
}
Run Code Online (Sandbox Code Playgroud)
到目前为止,这是非常轻松的,但现在呢?我们如何将一堆OrderDetails变成一堆OrderDetailDtos用于数据绑定?
你可能把一个构造函数OrderDto,它接受一个OrderDetail,写的映射代码弄得一塌糊涂.或者你可能在某个地方有一个静态转换类.或者,您可以使用AutoMapper,并改为编写:
Mapper.CreateMap<OrderDetail, OrderDetailDto>();
OrderDetailDto[] items =
Mapper.Map<OrderDetail[], OrderDetailDto[]>(orderDetails);
GridView1.DataSource = items;
Run Code Online (Sandbox Code Playgroud)
那里.我们刚刚采取了原本令人厌恶的无意义映射代码并将其缩减为三行(实际映射只有两行).
这有助于解释目的吗?
| 归档时间: |
|
| 查看次数: |
1875 次 |
| 最近记录: |