比AutoMapper輕量快速簡潔的實體映射庫YeaJur.Mapper

来源:http://www.cnblogs.com/Yair/archive/2017/01/19/6308981.html
-Advertisement-
Play Games

比AutoMapper輕量快速簡潔的實體映射庫YeaJur.Mapper ...


之前在做實體深拷貝時一直使用的AutoMapper,但是總是覺得其寫法比繁瑣,效率也不算很高,自己寫了一個輕量級的實體拷貝庫YeaJur.Mapper,和AutoMapper 測試對比如下

PK項

YeaJur.Mapper

AutoMapper

版本

1.0

5.2

大小

6KB

247KB

相同類型深拷貝——實例(json格式)

 [

    {

        "Products": [

            {

                "Id": "7ef9516e-e019-4b54-9636-89fc56b2906f",

                "Name": "YeaJur.Mapper",

                "Count": 32,

                "CreateTime": "/Date(1484796223405)/",

                "Price": 12.32,

                "SupplierInfo": {

                    "Id": "00293c28-b29a-4e2c-b5a2-6411d8a67d9e",

                    "Name": "YeaJur.Mapper",

                    "Other": null

                }

            },

            {

                "Id": "42f8157a-0f25-472b-9b15-15bc876abeff",

                "Name": "YeaJur.Mapper",

                "Count": 32,

                "CreateTime": "/Date(1484796223406)/",

                "Price": 12.32,

                "SupplierInfo": {

                    "Id": "24e5b9af-5108-462b-924f-b79bf9c1b160",

                    "Name": "YeaJur.Mapper",

                    "Other": null

                }

            },

            {

                "Id": "70a3414b-2c76-4417-a47c-4b807301f0f5",

                "Name": "YeaJur.Mapper",

                "Count": 32,

                "CreateTime": "/Date(1484796223406)/",

                "Price": 12.32,

                "SupplierInfo": {

                    "Id": "1990168f-244d-42b8-8276-7ee08e0829a0",

                    "Name": "YeaJur.Mapper",

                    "Other": null

                }

            }

        ],

        "SellerInfo": {

            "Id": "31875b3f-970d-4383-9d2f-b769c3e7cc87",

            "Name": "YeaJur.Mapper",

            "Remark": "YeaJur.Mapper"

        }

    },

    {

        "Products": [

            {

                "Id": "cd78b31d-0e83-4586-a202-f45349eabe98",

                "Name": "YeaJur.Mapper",

                "Count": 32,

                "CreateTime": "/Date(1484796223406)/",

                "Price": 12.32,

                "SupplierInfo": {

                    "Id": "e4ade655-22e3-4850-96dc-02f7059479b8",

                    "Name": "YeaJur.Mapper",

                    "Other": null

                }

            },

            {

                "Id": "20d2219b-d520-4c58-840e-c11b10e8878f",

                "Name": "YeaJur.Mapper",

                "Count": 32,

                "CreateTime": "/Date(1484796223406)/",

                "Price": 12.32,

                "SupplierInfo": {

                    "Id": "3817b018-369a-4413-b0df-cde5a877d0d7",

                    "Name": "YeaJur.Mapper",

                    "Other": null

                }

            },

            {

                "Id": "b83d5db6-1216-4a56-a448-d5c478a30b32",

                "Name": "YeaJur.Mapper",

                "Count": 32,

                "CreateTime": "/Date(1484796223406)/",

                "Price": 12.32,

                "SupplierInfo": {

                    "Id": "321b2dad-7d66-42d0-b75d-c019cd297a1b",

                    "Name": "YeaJur.Mapper",

                    "Other": null

                }

            }

        ],

        "SellerInfo": {

            "Id": "c7e7f104-3484-4640-9003-ad6ddd5cb3dc",

            "Name": "YeaJur.Mapper",

            "Remark": "YeaJur.Mapper"

        }

    },

    {

        "Products": [

            {

                "Id": "1d8c2158-008c-4ad1-8803-915a5e32c695",

                "Name": "YeaJur.Mapper",

                "Count": 32,

                "CreateTime": "/Date(1484796223406)/",

                "Price": 12.32,

                "SupplierInfo": {

                    "Id": "58c89199-c1fc-4c94-8d74-3ee3db5f074b",

                    "Name": "YeaJur.Mapper",

                    "Other": null

                }

            },

            {

                "Id": "311ca89e-be6c-4bcf-8730-12abb1388319",

                "Name": "YeaJur.Mapper",

                "Count": 32,

                "CreateTime": "/Date(1484796223406)/",

                "Price": 12.32,

                "SupplierInfo": {

                    "Id": "87f3c2ce-d6bd-4cfb-bcf0-9a48615b223c",

                    "Name": "YeaJur.Mapper",

                    "Other": null

                }

            },

            {

                "Id": "5d23505c-206a-4bdc-9086-92532fcf37d7",

                "Name": "YeaJur.Mapper",

                "Count": 32,

                "CreateTime": "/Date(1484796223406)/",

                "Price": 12.32,

                "SupplierInfo": {

                    "Id": "e5582774-ca39-43e0-8e78-9511ea96061b",

                    "Name": "YeaJur.Mapper",

                    "Other": null

                }

            }

        ],

        "SellerInfo": {

            "Id": "9f1b4e00-bf00-4946-8e8a-a2780c118079",

            "Name": "YeaJur.Mapper",

            "Remark": "YeaJur.Mapper"

        }

    }

相同類型深拷貝——寫法

 var model = list.Map();

 AutoMapper.Mapper.Initialize(cfg =>

            {

             cfg.CreateMap<List<Order>, List<Order>>();

            });

            var model = AutoMapper.Mapper.Map<List<Order>>(list);

相同類型深拷貝——運行結果樣例

 

相同類型深拷貝——運行平均速度

12.2ms(包括創建實體時間)

160.2ms(包括創建實體時間)

不同類型深拷貝——實例(json格式)

{

    "Id": "b0ade704-0a59-481a-b4b8-bf64a2fdaa8f",

    "Name": "YeaJur.Mapper",

    "Remark": "YeaJur.Mapper.Seller"

}

{

    "Id": "b0ade704-0a59-481a-b4b8-bf64a2fdaa8f",

    "Name": "YeaJur.Mapper",

    "Other": null

}

不同類型深拷貝——寫法

Supplier model2 = model.Map<Supplier>();

 

 

Supplier model2 = model.Map<Seller,Supplier>();

  AutoMapper.Mapper.Initialize(cfg =>

            {

                cfg.CreateMap<Seller, Supplier>();

            });

Supplier model2 = AutoMapper.Mapper.Map<Seller, Supplier>(model);

不同類型深拷貝——運行結果樣例

 

 

不同類型深拷貝——運行平均速度

9.6ms(包括創建實體時間)

174.6ms(包括創建實體時間)

不同類型自定義欄位深拷貝——實例(json格式)

{

    "Id": "b0ade704-0a59-481a-b4b8-bf64a2fdaa8f",

    "Name": "YeaJur.Mapper.Seller",

    "Remark": "YeaJur.Mapper.Seller"

}

{

    "Id": "b0ade704-0a59-481a-b4b8-bf64a2fdaa8f",

    "Name": "YeaJur.Mapper",

    "Other": null

}

不同類型自定義欄位深拷貝——寫法

  var dic = new Dictionary<string, string>

            {

                {nameof(Seller.Remark), nameof(Supplier.Other)}

            };

Supplier model2 = model.Map< Supplier>(dic);

Supplier model2 = model.Map<Seller, Supplier>(dic);

AutoMapper.Mapper.Initialize(cfg =>

            {

                cfg.CreateMap<Seller, Supplier>();

                cfg.ReplaceMemberName(nameof(Seller.Remark), nameof(Supplier.Other));

            });

            Supplier model2 = AutoMapper.Mapper.Map<Seller, Supplier>(model);

不同類型自定義欄位深拷貝——運行結果樣例

 

 

不同類型自定義欄位深拷貝——運行平均速度

10.2ms(包括創建實體時間)

176.4ms(包括創建實體時間)

在項目的nuget中搜索  Yeajur.Mapper 即可下載使用

https://www.nuget.org/packages/YeaJur.Mapper


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在webuploader上傳大文件時必須配置一下,不然請求後臺處理程式時,會請求超時。出現404! <system.web> <httpRuntime maxRequestLength="2040000" useFullyQualifiedRedirectUrl="true" executionTi ...
  • 在 Windows Forms 和 WPF 應用中使用 FontAwesome 圖標 ...
  • 在C#中 “\”是特殊字元,要表示它的話需要使用“\\”。由於這種寫法不方便,C#語言提供了@對其簡化。只要在字元串前加上@即可直接使用“\”。所以上面的路徑在C#中應該表示為“Book”,@“\Tmp\Book”,@“C:\Tmp\Book”。 相對路徑使用“/”字元作為目錄的分隔字元,而絕對路徑 ...
  • 前言 上一篇講述了執行sql和配置的一些功能,這篇說明IQueryable(linq)或執行sql的查詢緩存與清理,包括擴展到將緩存存儲到Redis中。 擴展類庫源碼: github:https://github.com/skigs/EFCoreExtend 引用類庫: nuget:https:// ...
  • 這幾天老感覺不對, 總覺得少點什麼, 今天才發現, 前面 3 裡面, 在獲取Action參數信息的時候, 少解析了. 裡面還有一個比較重要的東西. 今天看也是一樣的. 在 InvokeAction() 方法裡面, 有一句代碼: 這個是用來獲取參數的. 那麼參數是不是隨便獲取呢? 在Mvc 裡面, 頁 ...
  • 16年我們公司一共開發了好幾個企業網站。最初項目經理讓我用模板引擎,我參照著網上找的模板引擎的代碼及功能,自己寫了一個。當開發了幾個企業網站之後,發現開發效率太低了,同事們用模板引擎開發的過程中,寫模板改模板要花費不少時間,有時候特殊的需求,需要加個資料庫表,或者資料庫已有的欄目或內容表加個欄位什麼 ...
  • 因為一些配置屬性比較多,存在多組屬性,因此結合xml解析、緩存技術,實現配置文化的自動解析、存入緩存、緩存依賴實時更新配置內容。 配置文件反序列化存入緩存的核心方法: public Class.Settings GetSettings() { if (HttpRuntime.Cache["setti ...
  • 網上對TempData的總結為: 保存在session中,Controller每次執行請求時,會從session中一次獲取所有tempdata數據,保存在單獨的內部數據字典中,而後從session中清空tempdata。然後通過key從字典中獲取指定的Tempdata,每訪問一次後對應的Key就會從 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...