广告
返回顶部
首页 > 资讯 > 后端开发 > ASP.NET >ASP.NET Core扩展库之实体映射使用详解
  • 247
分享到

ASP.NET Core扩展库之实体映射使用详解

2024-04-02 19:04:59 247人浏览 八月长安
摘要

目录一、启用二、配置自定义转换逻辑三、使用四、通过特性指定属性映射关系五、拷贝六、示例在分层设计模式中,各层之间的数据通常通过数据传输对象(DTO)来进行数据的传递,而大多数情况下,

在分层设计模式中,各层之间的数据通常通过数据传输对象(DTO)来进行数据的传递,而大多数情况下,各层数据的定义结构大同小异,如何在这些定义结构中相互转换,之前我们通过使用AutoMapper库,但AutoMapper功能庞大,使用较为复杂,而在很多场景下,可能我们只需要一些基础的对象映射功能,那么此时你可以选择扩展库中的轻量级AutoMapper实现。

实体映射包含以下核心功能:

  • 在使用之前无需手动定义类型之间的映射关系
  • 采用动态编译、缓存转换委托,提升性能。
  • 支持通过特性定义属性映射关系
  • 支持插入自定义的转换处理方法
  • 支持列表转换
  • 支持嵌套类型转换
  • 支持循环引用及引用关系维持
  • 支持转换模式或拷贝模式
  • 支持生成预定义的拷贝委托
  • 为了保持其轻量性,目前支持以下转换

值类型转换
数值类型之间的兼容转换(如int-->uint)
支持值类型与其可空类型间的兼容转换
字典类型转换
列表类型转换
枚举类型与string类型间的转换
不支持结构体之间的转换以及结构体与类之间的转换

一、启用

启用轻量级的实体映射,有两种方式:

  • 如果你是和扩展库其他功能同时使用,可直接通过UseExtensions即可

  using IHost host = Host.CreateDefaultBuilder()
             // UseExtensions会自动注入Mapper
             .UseExtensions()
             .ConfigureServices(sc =>
             {
               // 通过ConfigureLightweightMapper来配置映射
               sc.ConfigureLightweightMapper(options =>
               {
                //
               });
             })
             .Build();
  • 如果你需要单独使用,可通过IServiceCollection上的AddLightweightMapper方法启用

  //实体转换
  serviceDescriptors.AddLightweightMapper()
    .ConfigureLightweightMapper(options =>
               {
                //
               });

二、配置自定义转换逻辑

你可以通过映射设置上的AddConvert来配置对应设置实体转换的后置逻辑,如下所示。


  //实体转换
  serviceDescriptors.AddLightweightMapper()
    .ConfigureLightweightMapper(options =>
    {
      // 通过AddConvert可自定义转换逻辑
      // 以下定义从SourceA转换到TargetB时,自动设置属性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);

四、通过特性指定属性映射关系

默认映射按照属性名称进行,你也可以通过MapperPropertyNameAttribute特性进行指定。

MapperPropertyNameAttribute:

属性名 类型 说明
Name String 目标或源的名称
TargetType Type 映射到的目标类型
SourceType Type 映射到当前类型的来源类型

通过SourceType或TargetType你可以根据需求灵活的在源类型或目标类型上设置映射关系。

五、拷贝

  • 实体映射也提供了拷贝方法,通过该方法可以将源实体属性拷贝到目标实体。

通过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扩展库之实体映射使用详解的详细内容,更多关于ASP.net core扩展库之实体映射的资料请关注编程网其它相关文章!

--结束END--

本文标题: ASP.NET Core扩展库之实体映射使用详解

本文链接: https://www.lsjlt.com/news/121817.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • ASP.NET Core扩展库之实体映射使用详解
    目录一、启用二、配置自定义转换逻辑三、使用四、通过特性指定属性映射关系五、拷贝六、示例在分层设计模式中,各层之间的数据通常通过数据传输对象(DTO)来进行数据的传递,而大多数情况下,...
    99+
    2022-11-11
  • ASP.NET Core扩展库之Http通用扩展库的使用详解
    目录一、开启服务端请求缓冲 二、请求头传递 三、请求头日志的记录 四、Http消息上的扩展方法 五、HttpClient上的扩展方法     ...
    99+
    2022-11-12
  • ASP.NET Core扩展库之Http日志的使用详解
    目录一、开启服务端请求日志 二、开启客户端请求日志 三、示例     最佳实践都告诉我们不要记录请求的详细日志,因为这有安全问题,但在实际开发...
    99+
    2022-11-12
  • ASP.NET Core扩展库之日志功能的使用详解
    目录一、简介 二、使用 三、配置 四、配置日志级别 五、日志级别的动态修改 六、本地文件日志配置 七、容器化支持 八、测试支持 九、禁用Serilog  &nbs...
    99+
    2022-11-11
  • ASP.NET Core如何使用AutoMapper实现实体映射
    这篇文章将为大家详细讲解有关ASP.NET Core如何使用AutoMapper实现实体映射,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、前言在实际的项目开发过程中,我们使用各种ORM框架可...
    99+
    2023-06-29
  • ASP.NET Core扩展库之Http请求模拟功能的使用
    目录一、在服务端使用 二、在单元测试中使用 三、示例     如今,完全独立的业务应用几乎不存在,不管是在企业内部微服务之间的调用,还是与外部...
    99+
    2022-11-12
  • Java实体映射工具MapStruct使用方法详解
    目录1.序 2.简单用例 3.使用详解 1)关于接口注解@Mapper几种属性用法详解 2) 其他方法级别注解 总结1.序 通常在后端开发中经常不直接返回实体Entity类,经过处...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作