加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

.net – 什么是Automapper?

发布时间:2020-12-16 00:27:51 所属栏目:asp.Net 来源:网络整理
导读:什么是 Automapper?它将如何帮助我的域和控制器层(asp.net mvc) 解决方法 也许一个例子会帮助这里… 假设你有一个很好地规范化的数据库模式,如下所示: Orders (OrderID,CustomerID,OrderDate) Customers (CustomerID,Name) OrderDetails (OrderDetID,Orde
什么是 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;

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

这有助于解释目的吗?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读