日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

AutoMapper 使用实践

發布時間:2023/12/4 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 AutoMapper 使用实践 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一.?? 使用意圖

? ? ? ?常常在開發過程中,碰到一個實體上的屬性值,要賦值給另外一個相類似實體屬性時,且屬性有很多的情況。一般不利用工具的話,就要實例化被賦值實體B,然后再將實體A的字段一個個賦值給B的屬性,單單寫這些沒有技術含量的賦值語句,就要用很大的代碼篇幅。假如做得好一點的話,一般就是利用反射的方式,將A屬性賦值給B,當然用反射的話,要順利將A的屬性,賦值B的屬性,這樣確實能夠減少代碼篇幅,那就要有一些約束或者限制,例如屬性名稱要相同,屬性的數據類型要相同,這樣反射起來才不費力。那如何使反射起來,更加靈活,可配置,且配置和反射過程能夠分離,實現職責單一,AutoMapper 就是這樣一個開源類庫。

二.?? 認識AutoMapper

官方地址 :http://automapper.org/

GitHub 地址:https://github.com/AutoMapper/AutoMapper 包含AutoMapper 源代碼與應用Simple。

開發指南:https://github.com/AutoMapper/AutoMapper/wiki/Getting-started

從我開發過程使用到一些場景

  • 實體->實體

  • 集合->集合

  • 實體字段名稱不同

  • 實體數據類型不同

  • 相同名稱,相同數據類型無需配置

  • 有Queryable Extensions ,也即支持Entity Framework

  • 三.?? 最佳實踐

    AutoMapper開發指南,有詳細的介紹,我這里就不再搬過說了,大家有空自己研究研究,我這里主要介紹一下AutoMapper比較好的實踐方式,廢話不多說,直接做項目給大家看。

  • 項目結構

  • ?

    每個項目用途,解決方案文件夾基本標示清楚。

    ? ? 2. 以訂單為例(不是真實業務,只是舉個簡單的例子),在Models 實體類庫 新增OrderModel模型,在ViewModels 新增OrderViewModel模型,代碼在下面

    using System;namespace Models { ? ?

    ? public class OrderModel{ ? ?
    ? ? ? ?public Guid OrderGuid { get; set; } ? ? ?
    ? ? ? ?public string OrderNo { get; set; }
    ? ?? ? public string OrderCreator { get; set; }
    ? ?? ??public DateTime OrderDateTime { get; set; }
    ? ?? ??public string OrderStatus { get; set; }
    ? ?????public string Description { get; set; }
    ? ?????public string Creator { get; set; }
    ? ?????public DateTime CreateDateTime { get; set; }
    ? ??????public string LastModifier { get; set; }
    ? ??????public DateTime LastModifiedDateTime { get; set; }} }
    using System;
    namespace ViewModels { ?
    ? ?public class OrderViewModel{ ?
    ? ?? ? ?public Guid OrderGuid { get; set; } ? ?
    ? ? ? ?? ?public string OrderNo { get; set; } ? ?
    ? ? ? ?? ??public string OrderCreator { get; set; }
    ? ? ? ?? ??public DateTime OrderDateTime { get; set; }
    ? ? ? ?? ???public string OrderStatus { get; set; } ?
    ? ? ? ?? ???public string Description { get; set; } } }


    這里假設ViewModel,在使用過程中,不需要創建與修改相關的字段。

    3. AutoMapper 配置

    通過NuGet 程序包管理器,下載AutoMapper Dll,右鍵-》AutoMapperProfiles 類庫-》管理NuGet程序包-》聯機-》右上角搜索“AutoMapper” 下載安裝

    新增?ModelToViewModelProfile,ViewModelToModelProfile?兩個配置類,繼承AutoMapper 的 Profile 類,實現Configure重載方法,并分別引入Models & ViewModels 類庫,ModelToViewModelProfile,ViewModelToModelProfile 代碼如下

    using AutoMapper;
    using Models;
    using ViewModels;

    namespace AutoMapperProfiles { ?
    ? ?public class ModelToViewModelProfile:Profile{ ? ? ? ?
    ? ? ??protected override void Configure(){CreateMap<OrderModel, OrderViewModel>();}} }


    using AutoMapper;
    using Models;
    using ViewModels;
    namespace AutoMapperProfiles { ?
    ?public class ViewModelToModelProfile : Profile{ ? ? ?
    ? ?protected override void Configure(){CreateMap<OrderViewModel, OrderModel>();}} }

    4.注冊配置

    在AutoMapperRegister 項目中,新增AutoMapperProfileRegister 類,按照 第3點,安裝一下AutoMapper,同時引用AutoMapperProfiles 類庫。代碼如下


    using AutoMapper;
    using AutoMapperProfiles

    namespace AutoMapperRegister { ?
    ??public class AutoMapperProfileRegister{ ? ? ?
    ?? ? ?public static void Register(){Mapper.Configuration.AddProfile(new ModelToViewModelProfile());Mapper.Configuration.AddProfile(new ViewModelToModelProfile());}} }

    5. 控制臺驗證是否能夠順利轉換

    按照 第3點,安裝一下AutoMapper,引入?AutoMapperRegister ,Models,ViewModels Dll,編寫測試代碼,代碼如下(見證奇跡的時候到了)

    using System;
    using System.Collections.Generic;
    using System.Linq;using System.Text;
    using System.Threading.Tasks;
    using AutoMapper;
    using AutoMapperRegister;
    using Models;
    using ViewModels;

    namespace ConsoleAutoMapperSample { ? ?
    ? class Program{ ? ? ?
    ? ? ?static void Main(string[] args){AutoMapperProfileRegister.Register(); ? ? ? ?
    ? ? ? ? ?var order = new OrderModel{OrderGuid = Guid.NewGuid(),OrderNo = "201604020001",OrderCreator = "david",OrderDateTime = DateTime.Now,OrderStatus = "已出庫",Description = "請提供個人發票"}; ? ? ? ? ?
    ? ? ? ? ? ??var orderView = Mapper.Map<OrderModel, OrderViewModel>(order);orderView.OrderStatus = "已完成"; ? ? ? ?
    ? ? ? ? ?? ?var updateOrder = Mapper.Map<OrderViewModel, OrderModel>(orderView);}} }

    經過追蹤對象屬性變化,全部轉換成功,不方便截圖,稍后我會放出源代碼。



    原文地址:http://www.cnblogs.com/davidzhou/p/5347556.html



    .NET社區新聞,深度好文,微信中搜索dotNET跨平臺或掃描二維碼關注


    總結

    以上是生活随笔為你收集整理的AutoMapper 使用实践的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。