华域联盟 .Net ASP.NET Core扩展库之实体映射使用详解

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

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扩展库之实体映射的资料请关注华域联盟其它相关文章!

您可能感兴趣的文章:ASP.NET Core扩展库之Http请求模拟功能的使用ASP.NET Core扩展库之Http通用扩展库的使用详解ASP.NET Core实现自动依赖注入ASP.NET Core中使用令牌桶限流的实现ASP.NET Core自动生成小写破折号路由的实现方法如何在ASP.NET Core中使用HttpClientFactory如何在ASP.Net Core中使用SerilogASP.NET Core 5中如何生成PDF文档ASP.NET Core中使用LazyCache的全过程ASP.NET Core快速入门之环境篇

ASP.NET
Core
扩展库
实体映射

相关文章
浅析.Net Core中Json配置的自动更新这篇文章主要介绍了浅析.Net Core中Json配置的自动更新,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 2019-04-04
asp.net 结合mysql存储过程进行分页代码最近用mysql + asp.net来写网站,既然mysql已经支持存储过程了,那么像分页这么常用的东西,当然要用存储过程啦 2008-11-11
DropDownList根据下拉项的Text文本序号排序在某些时候表中没有可以排序的字段同时呢也不想修改表结构,但它的项文本有序号这时就可以用这方法排序,感兴趣的你可以参考下,或许本文知识点对你有所帮助 2013-03-03
ASP.NET全栈开发教程之前后台校验结合详解这篇文章主要给大家介绍了关于ASP.NET全栈开发教程之前后台校验结合的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 2018-07-07
浅析ASP.NET万能JSON解析器这篇文章主要是对ASP.NET万能JSON解析器进行了详细的分析介绍,需要的朋友可以过来参考下,希望对大家有所帮助 2013-12-12
解读ASP.NET密码强度验证代码实例分享这篇文章介绍了ASP.NET密码强度验证代码实例,有需要的朋友可以参考一下 2013-10-10
利用ASP.NET MVC和Bootstrap快速搭建响应式个人博客站(一)这篇文章主要介绍了利用ASP.NET MVC和Bootstrap快速搭建响应式个人博客站(一)的相关资料,需要的朋友可以参考下 2016-06-06
asp.net String.format中大括号的加入方法String.format中大括号的加入方法,需要的朋友可以参考下。 2010-05-05
详解log4net的使用这篇文章主要介绍了log4net的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2019-04-04
DropDownList设置客户端事件思路这篇文章主要介绍了DropDownList设置客户端事件思路,需要的朋友可以参考下 2015-09-09

最新评论

本文由 华域联盟 原创撰写:华域联盟 » ASP.NET Core扩展库之实体映射使用详解

转载请保留出处和原文链接:https://www.cnhackhy.com/4955.htm

本文来自网络,不代表华域联盟立场,转载请注明出处。

作者:

发表回复

联系我们

联系我们

2551209778

在线咨询: QQ交谈

邮箱: [email protected]

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部