麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

AutoMapper(七)

2019-11-14 13:48:28
字體:
來源:轉載
供稿:網友

返回總目錄


Null值替換

如果源類型的成員鏈上的屬性值為Null,Null值替換允許提供一個可替換的值。下面有兩個類Person和PersonInfo類,都有一個屬性Title(頭銜),從Person映射到PersonInfo,如果Person的屬性沒有賦值,那么PersonInfo的對應屬性值就用“屌絲”來替換。

namespace SeventhAutoMapper{    class Person    {        public string Title { get; set; }     }    class PersonInfo    {        public string Title { get; set; }    }    class PRogram    {        static void Main(string[] args)        {            //映射            Mapper.CreateMap<Person, PersonInfo>()                .ForMember(dest => dest.Title, opt => opt.NullSubstitute("屌絲"));//源屬性如果為null,置為“屌絲”            //執行映射            var personInfo = Mapper.Map<PersonInfo>(new Person());//源屬性未賦值,故為null          var personInfo2 = Mapper.Map<PersonInfo>(new Person(){Title = "高富帥"});//源屬性有值            //輸出結果            Console.WriteLine("personInfo.Title=" + personInfo.Title);          Console.WriteLine("personInfo2.Title=" + personInfo2.Title);          Console.Read();        }    }}

測試結果如下:

image

開放泛型

AutoMapper支持開放泛型映射。下面創建兩個泛型類:

class Soure<T>{    public T Value { get; set; }}class Destination<T>{    public T Value { get; set; }}

我們不需要創建封閉的泛型類型(也就是不將具體的類型寫死在尖括號內),AutoMapper在運行時會將開放泛型的任何配置應用到關閉的映射上去。

//創建開放泛型的映射Mapper.CreateMap(typeof(Source<>),typeof(Destination<>));var src1 = new Source<int> {Value = 22};var dest1= Mapper.Map<Destination<int>>(src1);Console.WriteLine(dest1.Value);var src2  = new Source<string> {Value = "Hello,AutoMapper!"};var dest2 = Mapper.Map<Destination<string>>(src2);Console.WriteLine(dest2.Value);//......依次類推Console.Read();

測試結果如下:

image

因為C#只允許關閉的泛型形參,所以必須使用不帶泛型參數的CreateMap方法來創建自己的開放泛型參數映射,同時可以使用所有可以利用的映射配置。AutoMapper在配置驗證期間會跳過開放泛型類型映射。

也可以創建一個開放泛型轉換器:

Mapper.CreateMap(typeof(Source<>), typeof(Destination<>)).ConvertUsing(typeof(Converter<>));

投影

通過扁平化對象模型,將一個源類型轉換成一個目標類型。不需要額外的配置,AutoMapper只要求一個扁平的目標類型能匹配源類型的命名結構。當把一個源值投影到一個不精準匹配源結構的目標值時,必須指明成員映射定義。

舉個栗子,我們想把一個源結構CalendarEvent轉成一個在Web頁面上方便用戶輸入的目標結構CalendarEventForm:

public class CalendarEvent{    public DateTime Date { get; set; }    public string Title { get; set; }}public class CalendarEventForm{    public DateTime EventDate { get; set; }    public int EventHour { get; set; }    public int EventMinute { get; set; }    public string Title { get; set; }}

由于目標屬性不是很匹配源屬性(CalendarEvent.Date需要成為CalendarEventForm.EventDate),我們需要在類型映射配置中指明成員的映射規則:

var calender = new CalendarEvent(){    Date = DateTime.Now,    Title = "歷史性時刻"};//創建映射Mapper.CreateMap<CalendarEvent, CalendarEventForm>()    .ForMember(dest => dest.EventDate, opt => opt.MapFrom(src => src.Date.Date))    .ForMember(dest => dest.EventHour, opt => opt.MapFrom(src => src.Date.Hour))    .ForMember(dest => dest.EventMinute, opt => opt.MapFrom(src => src.Date.Minute));//執行映射var calenderForm = Mapper.Map<CalendarEventForm>(calender);//輸出映射前的對象Console.WriteLine("calender.Date={0},Title={1}",calender.Date,calender.Title);//輸出映射后的對象foreach (PropertyInfo info in calenderForm.GetType().GetProperties()){    Console.WriteLine(info.Name+"="+info.GetValue(calenderForm));}

測試結果如下:

image

 

好的,關于AutoMapper的系列教程就先告一段落了,當時開這系列教程的初衷是為了順利地進行項目地開發,現在會用了,關于AutoMapper的話題就暫時先放放,不過以后肯定還會有關于AutoMapper的博客的。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 色柚视频网站ww色 | 国产精品三级a三级三级午夜 | www.国产.com | 91在线免费观看 | caoporn国产一区二区 | 多男操一女视频 | 亚洲欧美aⅴ | 国产精品久久久久久影院8一贰佰 | 国产性tv国产精品 | 国产精品亚洲精品日韩已方 | 天天舔天天插 | 久久国产经典 | 黄色的视频免费看 | 最新av免费网址 | 爱射av| 日本aaaa片毛片免费观看视频 | 欧美一级小视频 | 7777久久香蕉成人影院 | 欧美韩国日本在线 | 久草在线视频新 | 久久久久久久久久久一区 | 精品国产一区二区三区久久久狼牙 | 成人不卡一区二区 | 国产精品一区二区免费在线观看 | 国产日产精品一区二区三区四区 | 性爱视频在线免费 | 欧美淫视频| 国产精品久久久久久久四虎电影 | 一级黄色免费观看 | 一级黄色毛片播放 | 免费国产成人高清在线看软件 | 欧美一级黄色免费 | 欧美a级大胆视频 | 久久久www成人免费毛片 | 三人弄娇妻高潮3p视频 | 精品一区二区久久久久久久网精 | 精品中文视频 | 成品片a免费直接观看 | 国产午夜精品一区二区三区免费 | 亚州综合图片 | 欧美日韩在线看片 |