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

ASP.NET Core擴(kuò)展庫(kù)之實(shí)體映射使用詳解

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

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

實(shí)體映射包含以下核心功能:

  • 在使用之前無(wú)需手動(dòng)定義類型之間的映射關(guān)系
  • 采用動(dòng)態(tài)編譯、緩存轉(zhuǎn)換委托,提升性能。
  • 支持通過(guò)特性定義屬性映射關(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)換

一、啟用

啟用輕量級(jí)的實(shí)體映射,有兩種方式:

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

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

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

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

三、使用

你可以通過(guò)IMapperProvider的GetMapper方法或IMapper<,>直接獲取Mapper實(shí)例。

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

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

默認(rèn)映射按照屬性名稱進(jìn)行,你也可以通過(guò)MapperPropertyNameAttribute特性進(jìn)行指定。

MapperPropertyNameAttribute:

屬性名 類型 說(shuō)明
Name String 目標(biāo)或源的名稱
TargetType Type 映射到的目標(biāo)類型
SourceType Type 映射到當(dāng)前類型的來(lái)源類型

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

五、拷貝

  • 實(shí)體映射也提供了拷貝方法,通過(guò)該方法可以將源實(shí)體屬性拷貝到目標(biāo)實(shí)體。

通過(guò)IMapper<,>的CopyTo方法進(jìn)行默認(rèn)拷貝:

var mapperB = host.Services.GetRequiredService<IMapper<SourceA, TargetB>>();
var targetB1 = new TargetB();
mapperB.CopyTo(sourceA, targetB1);
  • 通過(guò)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);

六、示例

以上示例完整項(xiàng)目,請(qǐng)參考GitHub示例

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

相關(guān)文章

最新評(píng)論

林西县| 漠河县| 乌兰县| 乐昌市| 犍为县| 芒康县| 平谷区| 莲花县| 塔河县| 枣强县| 都兰县| 荣昌县| 新郑市| 灌阳县| 梧州市| 齐河县| 枝江市| 三亚市| 东兰县| 钦州市| 杭锦旗| 县级市| 搜索| 平武县| 南雄市| 通辽市| 华亭县| 波密县| 宝清县| 桂平市| 定南县| 阜康市| 上思县| 娱乐| 儋州市| 新闻| 屏南县| 东兰县| 西贡区| 白山市| 平阳县|