無名小卒AutoMapper的大顯神威

來源:互聯網
上載者:User

標籤:automapper   object to object   ef   dto   

       最近在做gxpt(高校平台的項目),前台架構用的是MVC,後台用的是EF+WCF。怎麼突然說出來感覺很高大上的樣子。呵呵!但是在寫代碼的時候就發現一個問題。就是在EF中的實體(Model)跟前台需要的實體(DTO資料轉送對象)是不一樣的,所以就需要轉換一下。一開始也沒多想,可能是被做項目的熱情沖昏了頭腦,寫多少代碼都不覺得類,所以每當需要轉換的時候就一個一個的寫!給大家看一個例子!

 

<span style="font-size:18px;">namespace testautomapper{    //學生源實體類    public class studentSource    {        public string name { get; set; }        public int age {get;set;}        public string sex { get; set; }    }}</span>

<span style="font-size:18px;">namespace testautomapper{    //學生目標實體類    public class studentPurpost    {        public string name { get; set; }        public string age { get; set; }        public string sex { get; set; }    }}</span>

<span style="font-size:18px;"><span style="font-size:18px;">namespace testautomapper{    class Program    {        static void Main(string[] args)        {            //要被轉化的實體    這裡類比的是EF中的實體            studentSource sSource = new studentSource            {                name = "張宏傑",                age = 23,                sex = "男"            };            //類比前台要求的實體,  轉換後的實體!            studentPurpost sPurpost = new studentPurpost();            sPurpost.age = sSource.age.ToString(); ;            sPurpost.name = sSource.name;            sPurpost.sex = sSource.sex;            Console.WriteLine(sPurpost.name + sPurpost.sex + sPurpost.age);        }    }}</span></span>

       可是都是這樣一點一點的轉換的,如果那個實體有幾十個屬性的話,哦,my god ;簡直不敢想象。如果是集合的話,那莫還要寫一個迴圈。真的好麻煩!

       後來寫著寫著,就感覺煩了,這樣子太浪費時間了,就沒有什麼好的方法嗎!答案顯然是肯定的,好方法還真的有,答案就是AutoMapper。

       什麼是AutoMapper呢?  

       AutoMapper 是什麼呢?Object-ObjectMapping工具,一個對象轉換為另一個對象的工具!做一個比喻吧,如果在一個程式中,把這個程式中比作一個家庭的話,EF就是爸爸,那麼AutoMapper就是媽媽,而DTO就是孩子!媽媽負責協調爸爸和兒子之間的關係。賺錢養家的事情就要交給爸爸去做!

       EntityFramework(父親)、AutoMapper(母親)和DTO(孩子)你我都知道的官方定義:

  • EntityFramework:是微軟以 ADO.NET 為基礎所發展出來的對象關係對應 (O/R Mapping) 解決方案。
  • AutoMapper:Object-Object Mapping工具。
  • DTO:資料轉送對象(Data Transfer Object)。

  EntityFramework的定義中有“ORM“關鍵字,那ORM又是什嗎?

ORM:對象關係映射(Object/Relation Mapping),是隨著物件導向的軟體開發方法發展而產生的。物件導向的開發方法是當今企業級應用開發環境中的主流開發方法,關聯式資料庫是企業級應用環境中永久存放資料的主流資料存放區系統。對象和關係資料是業務實體的兩種表現形式,業務實體在記憶體中表現為對象,在資料庫中表現為關係資料。記憶體中的對象之間存在關聯和繼承關係,而在資料庫中,關係資料無法直接表達多對多關聯和繼承關係。   --百度百科

  概念清楚了就好辦了,我們再來分析下,從上面定義可以看出:AutoMapper是Object-Object映射工具,EntityFramework是一種ORM架構,DTO是資料轉送對象(Data Transfer Object),請注意這三個定義中都包含對象(Object)關鍵字,毫無疑問,AutoMapper所做的工作就是ORM中的“O”和DTO中的“O”之間的映射轉換。 

       那麼我們該如何去應用它呢?

       在應用它之前我們先要引用它。點擊工具下的庫封裝管理員,選擇程式包管理主控台!然後輸入Install-PackageAutoMapper。 然後在引入AutoMapper;就可以放心的使用來了!

還是上邊的那個例子,studentSource實體轉換為studentPurpost 實體!

<span style="font-size:18px;"><span style="font-size:18px;">namespace testautomapper{    class Program    {        static void Main(string[] args)        {            //建立映射規則            Mapper.CreateMap<studentSource, studentPurpost>();            //建立一個實體            studentSource sSource = new studentSource            {                name = "張宏傑",                age = 23,                sex = "男"            };            //進行轉換            var sPurpost = Mapper.Map<studentPurpost>(sSource);            Console.WriteLine(sPurpost.name + sPurpost.sex + sPurpost.age);        }    }</span>}</span>

      這樣我們就可以將一個實體轉換為另一個實體了!現在的情況是兩個實體的子屬性欄位一樣,所以我們就可以轉換了!當然這樣的簡單的實體的集合也是可以進行轉換的!

<span style="font-size:18px;"><span style="font-size:18px;">namespace testautomapper{    class Program    {        static void Main(string[] args)        {            //建立一個轉換關係規則            Mapper.CreateMap<studentSource, studentPurpost>();            //建立一個實體集合            List<studentSource> list = new List<studentSource>();            studentSource s = new studentSource            {                name = "hongjie",                age = 13,                sex = "nan"            };            list.Add(s);            //進行轉換            List<studentPurpost> sPurpostList = Mapper.Map<List<studentSource>, List<studentPurpost>>(list);            Console.WriteLine(sPurpostList[0].age + sPurpostList[0].name + sPurpostList[0].sex);        }    }}</span></span>

       怎麼樣,感覺是不是很爽。這樣做省去了我們的很多麻煩事,讓我們可以專心的對待我們的商務邏輯了,在也不用寫這種沒用的代碼浪費生命了!

       這就是automapper的簡單應用,如果還想繼續深入的瞭解AutoMapper,請繼續關注我的部落格,本人還會陸續推出其他文章!


無名小卒AutoMapper的大顯神威

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.