最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

ASP.NET Core擴展庫之實體映射使用詳解

 更新時間:2021年03月17日 09:27:42   作者:xfrog  
這篇文章主要介紹了ASP.NET Core擴展庫之實體映射使用詳解,幫助大家更好的理解和學(xué)習(xí)使用.net技術(shù),感興趣的朋友可以了解下

在分層設(shè)計模式中,各層之間的數(shù)據(jù)通常通過數(shù)據(jù)傳輸對象(DTO)來進行數(shù)據(jù)的傳遞,而大多數(shù)情況下,各層數(shù)據(jù)的定義結(jié)構(gòu)大同小異,如何在這些定義結(jié)構(gòu)中相互轉(zhuǎn)換,之前我們通過使用AutoMapper庫,但AutoMapper功能龐大,使用較為復(fù)雜,而在很多場景下,可能我們只需要一些基礎(chǔ)的對象映射功能,那么此時你可以選擇擴展庫中的輕量級AutoMapper實現(xiàn)。

實體映射包含以下核心功能:

  • 在使用之前無需手動定義類型之間的映射關(guān)系
  • 采用動態(tài)編譯、緩存轉(zhuǎn)換委托,提升性能。
  • 支持通過特性定義屬性映射關(guān)系
  • 支持插入自定義的轉(zhuǎn)換處理方法
  • 支持列表轉(zhuǎn)換
  • 支持嵌套類型轉(zhuǎn)換
  • 支持循環(huán)引用及引用關(guān)系維持
  • 支持轉(zhuǎn)換模式或拷貝模式
  • 支持生成預(yù)定義的拷貝委托
  • 為了保持其輕量性,目前支持以下轉(zhuǎn)換

值類型轉(zhuǎn)換
數(shù)值類型之間的兼容轉(zhuǎn)換(如int-->uint)
支持值類型與其可空類型間的兼容轉(zhuǎn)換
字典類型轉(zhuǎn)換
列表類型轉(zhuǎn)換
枚舉類型與string類型間的轉(zhuǎn)換
不支持結(jié)構(gòu)體之間的轉(zhuǎn)換以及結(jié)構(gòu)體與類之間的轉(zhuǎn)換

一、啟用

啟用輕量級的實體映射,有兩種方式:

  • 如果你是和擴展庫其他功能同時使用,可直接通過UseExtensions即可
  using IHost host = Host.CreateDefaultBuilder()
             // UseExtensions會自動注入Mapper
             .UseExtensions()
             .ConfigureServices(sc =>
             {
               // 通過ConfigureLightweightMapper來配置映射
               sc.ConfigureLightweightMapper(options =>
               {
                //
               });
             })
             .Build();
  • 如果你需要單獨使用,可通過IServiceCollection上的AddLightweightMapper方法啟用
  //實體轉(zhuǎn)換
  serviceDescriptors.AddLightweightMapper()
    .ConfigureLightweightMapper(options =>
               {
                //
               });

二、配置自定義轉(zhuǎn)換邏輯

你可以通過映射設(shè)置上的AddConvert來配置對應(yīng)設(shè)置實體轉(zhuǎn)換的后置邏輯,如下所示。

  //實體轉(zhuǎn)換
  serviceDescriptors.AddLightweightMapper()
    .ConfigureLightweightMapper(options =>
    {
      // 通過AddConvert可自定義轉(zhuǎn)換邏輯
      // 以下定義從SourceA轉(zhuǎn)換到TargetB時,自動設(shè)置屬性C的值
      options.AddConvert<SourceA, TargetB>((mapper, a, b) =>
      {
        b.C = "C";
      });
    });

三、使用

你可以通過IMapperProvider的GetMapper方法或IMapper<,>直接獲取Mapper實例。

  • 通過IMapperProvider
// 通過IMapperProvider
var mapperProvider = host.Services.GetRequiredService<IMapperProvider>();
var mapper = mapperProvider.GetMapper<SourceA, TargetA>();
var targetA = mapper.Convert(sourceA);
  • 通過IMapper<,>
var mapperB = host.Services.GetRequiredService<IMapper<SourceA, TargetB>>();
var targetB = mapperB.Convert(sourceA);

四、通過特性指定屬性映射關(guān)系

默認映射按照屬性名稱進行,你也可以通過MapperPropertyNameAttribute特性進行指定。

MapperPropertyNameAttribute:

屬性名 類型 說明
Name String 目標或源的名稱
TargetType Type 映射到的目標類型
SourceType Type 映射到當前類型的來源類型

通過SourceType或TargetType你可以根據(jù)需求靈活的在源類型或目標類型上設(shè)置映射關(guān)系。

五、拷貝

  • 實體映射也提供了拷貝方法,通過該方法可以將源實體屬性拷貝到目標實體。

通過IMapper<,>的CopyTo方法進行默認拷貝:

var mapperB = host.Services.GetRequiredService<IMapper<SourceA, TargetB>>();
var targetB1 = new TargetB();
mapperB.CopyTo(sourceA, targetB1);
  • 通過DefineCopyTo方法定義排除字段外的拷貝委托
var mapperB = host.Services.GetRequiredService<IMapper<SourceA, TargetB>>();
 // 只拷貝指定字段之外的屬性
var copyProc = mapperB.DefineCopyTo(a =>
new
{
  a.A //忽略屬性A
});
var targetB2 = new TargetB();
copyProc(sourceA, targetB2);

六、示例

以上示例完整項目,請參考GitHub示例

以上就是ASP.NET Core擴展庫之實體映射使用詳解的詳細內(nèi)容,更多關(guān)于ASP.NET Core擴展庫之實體映射的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 詳解IdentityServer4介紹和使用

    詳解IdentityServer4介紹和使用

    在.NETCORE中更傾向于使用Identityserver4組件來構(gòu)建認證授權(quán)服務(wù),原因是IdentityServer4?是為ASP.NET?Core系列量身打造的一款基于?OpenID?Connect?和?OAuth?2.0?認證框架,本文重點介紹IDS4實際使用過程中涉及到的技術(shù)點,感興趣的朋友一起看看吧
    2022-07-07
  • ASP.NET實現(xiàn)個人信息注冊頁面并跳轉(zhuǎn)顯示

    ASP.NET實現(xiàn)個人信息注冊頁面并跳轉(zhuǎn)顯示

    這篇文章主要介紹了ASP.NET實現(xiàn)個人信息注冊頁面并跳轉(zhuǎn)顯示的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-12-12
  • a.sp.net清除ListBox的列表項(刪除所有項目)

    a.sp.net清除ListBox的列表項(刪除所有項目)

    在網(wǎng)上搜索相關(guān)資料,相當多用戶有相同要求,一次移除ListBox的列表所有項
    2012-01-01
  • 使用ASP.NET MVC引擎開發(fā)插件系統(tǒng)

    使用ASP.NET MVC引擎開發(fā)插件系統(tǒng)

    這篇文章主要為大家詳細介紹了使用ASP.NET MVC引擎開發(fā)插件系統(tǒng)的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • ASP.NET Core對不同類型的用戶進行區(qū)別限流詳解

    ASP.NET Core對不同類型的用戶進行區(qū)別限流詳解

    這篇文章主要介紹了ASP.NET Core對不同類型的用戶進行區(qū)別限流的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • ASP.NET MVC5網(wǎng)站開發(fā)之展示層架構(gòu)(五)

    ASP.NET MVC5網(wǎng)站開發(fā)之展示層架構(gòu)(五)

    這篇文章主要為大家詳細介紹了ASP.NET MVC5網(wǎng)站開發(fā)之展示層架構(gòu),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-08-08
  • ASP.NET 防止用戶跳過登陸界面

    ASP.NET 防止用戶跳過登陸界面

    在登陸頁面的檢查登陸成功代碼后添加如下代碼
    2009-03-03
  • asp.net core實現(xiàn)文件上傳功能

    asp.net core實現(xiàn)文件上傳功能

    這篇文章主要為大家詳細介紹了asp.net core實現(xiàn)文件上傳功能,怎么做單文件和多文件上傳,感興趣的小伙伴們可以參考一下
    2016-06-06
  • 你應(yīng)該知道的.NET錯誤與異常處理機制

    你應(yīng)該知道的.NET錯誤與異常處理機制

    這篇文章主要給大家介紹了關(guān)于.NET錯誤與異常處理機制的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用.NET具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • asp.net使用LINQ to SQL連接數(shù)據(jù)庫及SQL操作語句用法分析

    asp.net使用LINQ to SQL連接數(shù)據(jù)庫及SQL操作語句用法分析

    這篇文章主要介紹了asp.net使用LINQ to SQL連接數(shù)據(jù)庫及SQL操作語句用法,較為詳細的分析了LINQ操作sql語句的功能、使用方法與相關(guān)注意事項,需要的朋友可以參考下
    2016-05-05

最新評論

石渠县| 清流县| 台山市| 咸阳市| 东海县| 罗山县| 广水市| 平安县| 集安市| 新巴尔虎右旗| 康乐县| 东海县| 新巴尔虎右旗| 社旗县| 白河县| 百色市| 蒙自县| 曲阜市| 那坡县| 莱州市| 临泉县| 奎屯市| 汾阳市| 加查县| 宁国市| 宜兰市| 台前县| 休宁县| 互助| 永顺县| 海口市| 宁城县| 田林县| 泽普县| 淳安县| 富顺县| 特克斯县| 金塔县| 竹山县| 开江县| 海晏县|