国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

AutoMapper(五)

2019-11-14 13:48:19
字體:
供稿:網(wǎng)友

返回總目錄


Dynamic和ExpandoObject映射

AutoMapper不用任何配置就可以從dynamic(動(dòng)態(tài))對(duì)象映射或映射到dynamic對(duì)象。

namespace FifthAutoMapper{    //定義一個(gè)Person類    public class Person    {        public int Age { get; set; }        public string Name { get; set; }    }    //主程序    class PRogram    {        static void Main(string[] args)        {            //不需要CreateMap同樣可以映射,這就是所謂的“零配置”            //Mapper.CreateMap<MyDynamicClass, Person>().ReverseMap();            //將一個(gè)動(dòng)態(tài)對(duì)象映射到一個(gè)普通實(shí)例            dynamic dynamicObj = new ExpandoObject();//ExpandoObject對(duì)象包含可在運(yùn)行時(shí)動(dòng)態(tài)添加或移除的成員            dynamicObj.Age = 103;            dynamicObj.Name = "tkb至簡(jiǎn)";            Person person = Mapper.Map<Person>(dynamicObj);            Console.WriteLine("person.Age={0},Name={1}", person.Age, person.Name);            //將一個(gè)普通實(shí)例映射到動(dòng)態(tài)對(duì)象            dynamic dynamicObj2= Mapper.Map<ExpandoObject>(person);            Console.WriteLine("dynamicObj2.Age={0},Name={1}", dynamicObj2.Age, dynamicObj2.Name);            Console.Read();        }    }}

關(guān)于這個(gè)程序的說明,代碼中都注釋得很清楚了,不需再多做解釋。

扁平化

對(duì)象與對(duì)象之間的映射的通常用法就是將一個(gè)復(fù)雜的模型壓扁成一個(gè)更為簡(jiǎn)單的模型。為了演示需要,我這里定義幾個(gè)類,代碼如下:

namespace FifthAutoMapper{    public class Order    {        public Customer Customer { get; set; }        public decimal GetTotal()        {            return 100M;        }    }    public class Customer    {        public string Name { get; set; }    }    public class OrderDto    {        public string CustomerName { get; set; }        public decimal Total { get; set; }    }}

Order類:就是一個(gè)普通的訂單類,當(dāng)然,實(shí)際的項(xiàng)目肯定會(huì)有很多的屬性,這里為了方便演示,只保留一個(gè)屬性和一個(gè)方法。

Customer類:顧客類,定義了顧客的姓名。

OrderDto類:Order扁平化后的類,包含了特定需求的數(shù)據(jù)。

官方定義:當(dāng)使用CreateMap方法在AutoMapper中配置源類型和目標(biāo)類型時(shí),配置器會(huì)嘗試將源上的屬性和方法匹配到目標(biāo)的屬性上。如果目標(biāo)屬性的任何屬性在源類型的屬性,方法或者以Get為前綴的方法都不存在,那么AutoMapper會(huì)把目標(biāo)成員的名稱(按照PascalCase慣例)分割成獨(dú)立的單詞。

下面測(cè)試一下,在Main方法中添加如下代碼:

Mapper.CreateMap<Order, OrderDto>();var order = new Order(){    Customer = new Customer() {Name = "tkb至簡(jiǎn)"},};var orderDto= Mapper.Map<OrderDto>(order);Console.WriteLine(orderDto.CustomerName);Console.WriteLine(orderDto.Total);

image

雖然前面的博客已經(jīng)說了很多了,但這里還是在啰嗦地解釋一下。

我們?cè)贏utoMapper的Createmap方法中配置了類型映射。AutoMapper只能映射它知道的類型對(duì),因此我們使用CreateMap顯示地注冊(cè)了源/目標(biāo)類型對(duì)。為了執(zhí)行映射,我們使用Map方法。

在OrderDto類中,Total屬性匹配到了Order上的GetTotal方法。CustomerName屬性匹配到了Order上的Customer.Name屬性。總之,只要合適地命名目標(biāo)類型屬性,我們就不必配置單獨(dú)的屬性匹配。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 噶尔县| 锡林郭勒盟| 竹山县| 温州市| 新郑市| 阳曲县| 福州市| 原阳县| 同心县| 和田县| 临沭县| 肥城市| 保靖县| 蓬安县| 临邑县| 芒康县| 鹰潭市| 科尔| 上饶县| 湟源县| 阳西县| 渭源县| 枣庄市| 青神县| 西宁市| 屯门区| 集安市| 东宁县| 哈尔滨市| 建昌县| 侯马市| 马公市| 宁明县| 庐江县| 阿图什市| 始兴县| 海丰县| 自治县| 浙江省| 沂南县| 玉田县|