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

 更新时间:2021年03月17日 09:27:42   作者:xfrog  
这篇文章主要介绍了ASP.NET Core扩展库之实体映射使用详解,帮助大家更好的理解和学习使用.net技术,感兴趣的朋友可以了解下

在分层设计模式中,各层之间的数据通常通过数据传输对象(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扩展库之实体映射的资料请关注脚本之家其它相关文章!

相关文章

  • 详解IdentityServer4介绍和使用

    详解IdentityServer4介绍和使用

    在.NETCORE中更倾向于使用Identityserver4组件来构建认证授权服务,原因是IdentityServer4 是为ASP.NET Core系列量身打造的一款基于 OpenID Connect 和 OAuth 2.0 认证框架,本文重点介绍IDS4实际使用过程中涉及到的技术点,感兴趣的朋友一起看看吧
    2022-07-07
  • ASP.NET实现个人信息注册页面并跳转显示

    ASP.NET实现个人信息注册页面并跳转显示

    这篇文章主要介绍了ASP.NET实现个人信息注册页面并跳转显示的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-12-12
  • a.sp.net清除ListBox的列表项(删除所有项目)

    a.sp.net清除ListBox的列表项(删除所有项目)

    在网上搜索相关资料,相当多用户有相同要求,一次移除ListBox的列表所有项
    2012-01-01
  • 使用ASP.NET MVC引擎开发插件系统

    使用ASP.NET MVC引擎开发插件系统

    这篇文章主要为大家详细介绍了使用ASP.NET MVC引擎开发插件系统的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • ASP.NET Core对不同类型的用户进行区别限流详解

    ASP.NET Core对不同类型的用户进行区别限流详解

    这篇文章主要介绍了ASP.NET Core对不同类型的用户进行区别限流的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • ASP.NET MVC5网站开发之展示层架构(五)

    ASP.NET MVC5网站开发之展示层架构(五)

    这篇文章主要为大家详细介绍了ASP.NET MVC5网站开发之展示层架构,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-08-08
  • ASP.NET 防止用户跳过登陆界面

    ASP.NET 防止用户跳过登陆界面

    在登陆页面的检查登陆成功代码后添加如下代码
    2009-03-03
  • asp.net core实现文件上传功能

    asp.net core实现文件上传功能

    这篇文章主要为大家详细介绍了asp.net core实现文件上传功能,怎么做单文件和多文件上传,感兴趣的小伙伴们可以参考一下
    2016-06-06
  • 你应该知道的.NET错误与异常处理机制

    你应该知道的.NET错误与异常处理机制

    这篇文章主要给大家介绍了关于.NET错误与异常处理机制的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用.NET具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-08-08
  • asp.net使用LINQ to SQL连接数据库及SQL操作语句用法分析

    asp.net使用LINQ to SQL连接数据库及SQL操作语句用法分析

    这篇文章主要介绍了asp.net使用LINQ to SQL连接数据库及SQL操作语句用法,较为详细的分析了LINQ操作sql语句的功能、使用方法与相关注意事项,需要的朋友可以参考下
    2016-05-05

最新评论