02.AutoMapper 之扁平化(Flattening)
扁平化(Flattening)
物件對映器的常見用法是將一個複雜物件模型扁平化為一個簡單模型。例如您有一個以下複雜模型:
public class Order
{
private readonly IList<OrderLineItem> _orderLineItems = new List<OrderLineItem>();
public Customer Customer { get; set; }
public OrderLineItem[] GetOrderLineItems()
{
return _orderLineItems.ToArray();
}
public void AddOrderLineItem(Product product, int quantity)
{
_orderLineItems.Add(new OrderLineItem(product, quantity));
}
public decimal GetTotal()
{
return _orderLineItems.Sum(li => li.GetTotal());
}
}
public class Product
{
public decimal Price { get; set; }
public string Name { get; set; }
}
public class OrderLineItem
{
public OrderLineItem(Product product, int quantity)
{
Product = product;
Quantity = quantity;
}
public Product Product { get; private set; }
public int Quantity { get; private set;}
public decimal GetTotal()
{
return Quantity*Product.Price;
}
}
public class Customer
{
public string Name { get; set; }
}
我們希望將這個複雜的Order
物件扁平化為一個更簡單的OrderDto
,它只包含特定場景所需的資料:
public class OrderDto
{
public string CustomerName { get; set; }
public decimal Total { get; set; }
}
當您在AutoMapper
中配置源/目標型別對時,配置程式會嘗試將源型別上的屬性和方法與目標型別上的屬性進行匹配。如果對於目標型別上任何屬性,在源型別上沒有匹配的屬性、方法或者Get字首的方法,AutoMapper
根據PascalCase
約定將目標成員名稱拆分為單個單詞。
// 複雜模型
var customer = new Customer
{
Name = "George Costanza"
};
var order = new Order
{
Customer = customer
};
var bosco = new Product
{
Name = "Bosco",
Price = 4.99m
};
order.AddOrderLineItem(bosco, 15);
// 配置 AutoMapper
Mapper.Initialize(cfg => cfg.CreateMap<Order, OrderDto>());
// 執行對映
OrderDto dto = Mapper.Map<Order, OrderDto>(order);
dto.CustomerName.ShouldEqual("George Costanza");
dto.Total.ShouldEqual(74.85m);
在AutoMapper
中使用CreateMap
方法配置型別對映。AutoMapper
只能對映它識別的型別對,所以我們用CreateMap
顯式註冊了源/目標型別對。使用Map
方法執行對映。
在OrderDto
型別上,Total
屬性與 Order
型別的GetTotal()
方法匹配。CustomerName
屬性與Order
型別的Customer.Name
匹配。只要目標屬性命名符合規定,就不需要在單獨配置屬性匹配規則。
相關文章
- web前端陣列處理之扁平化陣列Web前端陣列
- 陣列扁平化陣列
- 多維陣列扁平化陣列
- JS 扁平化 (flatten) 陣列JS陣列
- 5種方式實現陣列扁平化陣列
- js陣列去重、扁平化函式JS陣列函式
- 陣列去重和陣列扁平化陣列
- 【知識分享】扁平化與分層化
- JS陣列專題1️⃣ ➖ 陣列扁平化JS陣列
- 扁平化圖示的終極設計指南
- reduce實現filter,map 陣列扁平化等Filter陣列
- Carbon Equal Dao——扁平化治理結構簡介
- UI設計培訓中的扁平化理念UI
- MongoDB 聚合嵌入的陣列(扁平化資料+管道)MongoDB陣列
- 網站設計扁平化站有哪些優勢?網站
- 430. 扁平化多級雙向連結串列
- Java中將多個Map扁平化為單個MapJava
- 綠色扁平化小清新網站 框架:TP3.13網站框架
- 面試官:JavaScript如何實現陣列拍平(扁平化)方法?面試JavaScript陣列
- .NET 開源扁平化、美觀的 C/S 控制元件庫控制元件
- JavaScript陣列常用方法解析和深層次js陣列扁平化JavaScript陣列JS
- 每日一道Leetcode - 430. 扁平化多級雙向連結串列LeetCode
- 最近遇到的問題總結(陣列去重、扁平化處理、sort 以及Promise等等)陣列Promise
- 一文搞定陣列扁平化(超全面的陣列拉平方案及實現)陣列
- 別隻關注扁平化!還有這類常用的UI設計方法值得學習UI
- PostgreSQL 原始碼解讀(30)- 查詢語句#15(查詢優化-扁平化處理UNION ALL)SQL原始碼優化
- PPT怎麼製作漸變UI圖示?PPT扁平化圖示圖片的製作方法UI
- 構建服裝鞋帽行業供應鏈平臺系統,建立扁平化的營銷體系行業
- 常用JS函式-陣列扁平化,快取函式,柯里化函式,防抖和節流函式JS函式陣列快取
- 漢字之美,拼音之韻
- PHP之string之ord()函式使用PHP函式
- 深入Spring之IOC之載入BeanDefinitionSpringBean
- JavaScript之thisJavaScript
- 若之
- 計算方法之祖沖之的精度
- Kubernetes安裝之八:配置master之schedulerAST
- vue 兄弟元件之間傳值之busVue元件
- 《碼農翻身》之浪潮之巔的WebWeb