亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > .NET > 正文

五步掌握OOM框架AutoMapper基本使用

2024-07-10 13:31:58
字體:
來源:轉載
供稿:網友

寫在前面

OOM顧名思義,Object-Object-Mapping實體間相互轉換,AutoMapper也是個老生常談了,其意義在于幫助你無需手動的轉換簡單而又麻煩的實體間關系,比如ViewModel和entity的轉換,SearchModel和Entity的轉換,我這篇分享的意義在于,網上大多數的分享都是幾年前的,很多方法已經被廢棄,到了編譯器里會告訴你該方法已經過時,廢棄的,不建議使用的,比如Mapper.CreateMap等方法,當然老司機大多數直接就去github看文檔了,或者google一下就了解了,但是中文資料關于方法廢棄后,并沒有什么說明了。本篇的五個實例可以幫你解決常見的基本問題.

預備

首先我們預備一些ViewModel和TModel。ViewModel就是你和用戶交互的實體。TModel就是你與數據庫打交道的實體。

實體展示如下:

TModel有如下三個簡單的實體,他們有獨立的實體,也有一對多的實體。

public class TAddress{ public string Country { get; set; } public string City { get; set; } public string Street { get; set; } public string PostCode { get; set; } public string CreateTime { get; set; } public int CreateUserId { get; set; }}
public class TAuthor {   public string Name { get; set; }   public string Description { get; set; }   public List<TContactInfo> ContactInfo { get; set; } }  public class TContactInfo {  public int Id { get; set; }  public string Email { get; set; }  public string Blog { get; set; }  public string Twitter { get; set; } }

ViewModel如下三個:

public class VM_Address {  public string Country { get; set; }  public string City { get; set; }  public string City2 { get; set; } } public class VM_Author {  public string Name { get; set; }  public string Description { get; set; }  public List<VM_ContactInfo> ContactInfo { get; set; } } public class VM_ContactInfo {  public int Id { get; set; }  public string Email { get; set; }  public string Blog { get; set; }  public string Twitter { get; set; } }

單個實體轉換

單個實體轉換的時候,在屬性字段名稱完全匹配的情況下,你只需指定兩個實體間的轉換規則,指定source源實體和destination目標實體。那么你應該參照如下實例:

VM_Address dto = new VM_Address   {    Country = "China",    City = "Beijing"   };   Mapper.Initialize(m => m.CreateMap<VM_Address, TAddress>());   TAddress address = Mapper.Map<VM_Address, TAddress>(dto);

請注意在AutoMapper5.x當中,Initialize來初始化你的規則是首選的。

在你指定轉換規則后,請使用Map方法,進行轉換并輸出你的目標實體。還有第一個參數代表SourceModel,第二個參數是DestinationModel.

單個實體不同名屬性轉換

當你需要對不同名稱的字段來進行映射的時候,請注意使用ForMember方法,第一個參數需要你制定所需特殊配置的目標字段,第二個參數你則需要制定你對該字段屬性的操作,我選擇了它提供的MapFrom方法,意義在于告訴AutoMapper,我需要講目標實體的City來源 指定為 源實體的City2屬性值。

VM_Address dto = new VM_Address   {    Country = "China",    City2 = "Beijing"   };   Mapper.Initialize(m => m.CreateMap<VM_Address, TAddress>().ForMember(x => x.City, opt => opt.MapFrom(o => o.City2)));   TAddress address = Mapper.Map<VM_Address, TAddress>(dto);

集合轉換

在集合間轉換的時候,你不需要配置目標List與源List對象中的匹配,而只需要配置你泛型對象的映射匹配關系。

   TAddress address = new TAddress { Country = "China", City = "Beijing" };   TAddress address2 = new TAddress() { Country = "USA", City = "New York" };   List<TAddress> addressList = new List<TAddress>() { address2, address };   Mapper.Initialize(m => m.CreateMap<TAddress, VM_Address>());//這里僅需配置實體間的轉換,而不是實體集合的轉換   List<VM_Address> res = Mapper.Map<List<TAddress>, List<VM_Address>>(addressList);

實體包含不同類型屬性轉換(忽略屬性)

在實體包含不同類型屬性的時候,比如TModel1中包含了一個List<TModel>,而你的ViewModel1中包含了一個List<ViewModel>.這個時候你可以選擇忽略這個屬性

 var contacts = new List<TContactInfo>() { new TContactInfo()           { Blog = "myblog", Email = "ws@qq.com" }, new TContactInfo() { Blog = "myblog", Email = "ll@qq.com" } };   TAuthor author = new TAuthor() { Description = "描述", Name = "吳雙", ContactInfo = contacts };   Mapper.Initialize(m => { m.CreateMap<TAuthor, VM_Author>().ForMember(x => x.ContactInfo, opt => opt.Ignore()); });       VM_Author dto = Mapper.Map<TAuthor, VM_Author>(author);//這里的Ignore代表配置ContractInfo該屬性的操作 為 忽略Ignore,映射時將忽略該屬性 由于List<TContactInfo>()和List<VM_ContactInfo>() 是不同類型,所以需要配置忽略或者是特殊映射,特殊映射例子看下方

實體包含不同類型屬性轉換(指定屬性Mapfrom)

當然你需要這個屬性的時候,你可以不忽略他,而是使用MapFrom來進行特殊的指定,并且在類型不相同的時候,你要指定你兩個類型間的映射匹配關系。正如下面實例中的

m.CreateMap<TContactInfo, VM_ContactInfo>();和
m.CreateMap<TAuthor, VM_Author>().ForMember(x => x.ContactInfo, opt => opt.MapFrom(o => o.ContactInfo));

var contacts = new List<TContactInfo>()   {    new TContactInfo() { Blog = "myblog", Email = "ws@qq.com" },    new TContactInfo() { Blog = "myblog", Email = "ll@qq.com" }   };   TAuthor author = new TAuthor() { Description = "描述", Name = "吳雙", ContactInfo = contacts };   Mapper.Initialize(m =>   {    m.CreateMap<TContactInfo, VM_ContactInfo>();//注意 內部不同類型實體轉換時必要的    m.CreateMap<TAuthor, VM_Author>().ForMember(x => x.ContactInfo, opt => opt.MapFrom(o => o.ContactInfo));//注意 制定MapFrom是必要的   });   VM_Author dto = Mapper.Map<TAuthor, VM_Author>(author);

寫在最后

在實體轉換中,AutoMapper的必要性和實用性已經被你一覽無余。

以上就是本文的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的幫助,同時也希望多多支持VeVb武林網!

 

注:相關教程知識閱讀請移步到ASP.NET教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美在线一级va免费观看| 亚洲字幕一区二区| 日韩免费视频在线观看| 国产精品一区二区久久精品| 8090成年在线看片午夜| 欧美在线视频免费观看| 成人乱人伦精品视频在线观看| 在线观看国产精品日韩av| 久久国产精品久久国产精品| 国产精品一区二区三区久久久| 日韩欧美成人免费视频| 国产精品视频久久久久| 综合网日日天干夜夜久久| 久久久中精品2020中文| 久久中文字幕在线| 欧美怡春院一区二区三区| 永久免费毛片在线播放不卡| 亚洲成人激情在线观看| 成人免费网站在线看| 中文字幕日韩综合av| 性色av一区二区三区红粉影视| 国产视频精品xxxx| 欧美黄色片免费观看| 欧美极品美女视频网站在线观看免费| 成人av电影天堂| 久久亚洲成人精品| 国产成人精品优优av| 欧美亚洲在线播放| 国产精品成人久久久久| 揄拍成人国产精品视频| 91亚洲精品久久久久久久久久久久| 亚洲午夜国产成人av电影男同| 久久久av免费| 精品视频在线导航| 亚洲欧美在线播放| 亚洲精品视频网上网址在线观看| 另类专区欧美制服同性| 日韩视频免费观看| 中文字幕亚洲字幕| 国产精品视频精品视频| 久久99国产精品自在自在app| 在线播放国产一区中文字幕剧情欧美| 日韩在线免费视频观看| 欧美成人免费全部| 亚洲欧美精品中文字幕在线| 91沈先生在线观看| 亚洲а∨天堂久久精品9966| 亚洲一区二区三区视频播放| 久久久久久亚洲精品| 性色av一区二区三区| 国产日产欧美a一级在线| 亚洲天堂av图片| 欧美性猛交99久久久久99按摩| 国产精品亚洲片夜色在线| 久久精品国产精品| 国产精品自拍偷拍视频| 国产精品成熟老女人| 国产69精品久久久久9999| 久久在线视频在线| 91中文字幕在线观看| 日韩av影片在线观看| 国产成人91久久精品| 成人黄色av免费在线观看| 亚洲国产精品大全| 亚洲第一视频网站| 午夜精品久久久久久久白皮肤| 久久久久久久久久亚洲| 欧美性视频精品| 久久99热精品| 97色在线视频| 国产美女扒开尿口久久久| 日韩在线观看电影| 久久五月天色综合| 日韩精品中文字| 欧美老妇交乱视频| 国产精品久久久久久搜索| 精品久久久久久久久久ntr影视| 亚洲а∨天堂久久精品喷水| 国产精品极品在线| 国产视频欧美视频| 精品一区二区三区四区| 欧美人与性动交a欧美精品| 日韩在线视频播放| 北条麻妃一区二区三区中文字幕| 91免费高清视频| 青青在线视频一区二区三区| 久久精彩免费视频| 免费不卡在线观看av| 国产精品美女www爽爽爽视频| 精品电影在线观看| 国模私拍一区二区三区| 欧洲中文字幕国产精品| 国产91精品高潮白浆喷水| 日韩欧美亚洲综合| 欧美日韩福利视频| 国产成人av在线| 欧美日韩一区二区三区在线免费观看| 欧美色图在线视频| 国产男人精品视频| 久久的精品视频| 精品欧美国产一区二区三区| 97精品在线观看| 成人黄色av免费在线观看| 91成品人片a无限观看| 国产精品日韩av| 97人洗澡人人免费公开视频碰碰碰| 日韩av电影手机在线| 国产精品一区久久久| 亚洲成人黄色网址| 欧美激情中文字幕乱码免费| 欧美一区二区三区精品电影| 97在线视频精品| 亚洲剧情一区二区| 国自在线精品视频| 91免费视频国产| 成人欧美一区二区三区黑人孕妇| 欧美一区深夜视频| 国产精品一区二区久久久久| 成人精品视频久久久久| 久久久这里只有精品视频| 国产一区二区三区免费视频| 国产精品福利在线观看网址| 九九精品视频在线观看| 国产精品久久久久久久久久新婚| 欧美日韩综合视频网址| 伊人久久综合97精品| 日本在线精品视频| 91精品免费视频| 欧美巨乳美女视频| 亚洲精品一区二区在线| 成人激情免费在线| 在线精品视频视频中文字幕| 欧美日韩精品在线| 成人精品久久一区二区三区| 欧美一区三区三区高中清蜜桃| 精品亚洲男同gayvideo网站| 亚洲女性裸体视频| 日韩在线视频二区| 操91在线视频| 欧美中文字幕精品| 亚洲国产成人精品一区二区| 欧美精品videos另类日本| 欧美激情一区二区久久久| 久久精品久久久久久| 欧洲s码亚洲m码精品一区| 高清欧美性猛交xxxx黑人猛交| 91高清免费视频| 色妞久久福利网| 亚洲第一视频在线观看| 亚洲精品日韩在线| 亚洲日韩中文字幕| 国产一区二区丝袜高跟鞋图片| 国产精品盗摄久久久| 久久伊人精品视频| 亚洲欧美中文日韩v在线观看| 亚洲欧美成人在线| 亚洲天堂男人天堂女人天堂| 亚洲欧美在线免费| 亚洲综合中文字幕68页| 亚洲欧美色图片| 97久久久久久| 久久在精品线影院精品国产| 中文字幕成人精品久久不卡| 亚洲成人精品久久久|