目录一、启用二、配置自定义转换逻辑三、使用四、通过特性指定属性映射关系五、拷贝六、示例在分层设计模式中,各层之间的数据通常通过数据传输对象(DTO)来进行数据的传递,而大多数情况下,
在分层设计模式中,各层之间的数据通常通过数据传输对象(DTO)来进行数据的传递,而大多数情况下,各层数据的定义结构大同小异,如何在这些定义结构中相互转换,之前我们通过使用AutoMapper库,但AutoMapper功能庞大,使用较为复杂,而在很多场景下,可能我们只需要一些基础的对象映射功能,那么此时你可以选择扩展库中的轻量级AutoMapper实现。
实体映射包含以下核心功能:
值类型转换
数值类型之间的兼容转换(如int-->uint)
支持值类型与其可空类型间的兼容转换
字典类型转换
列表类型转换
枚举类型与string类型间的转换
不支持结构体之间的转换以及结构体与类之间的转换
启用轻量级的实体映射,有两种方式:
using IHost host = Host.CreateDefaultBuilder()
// UseExtensions会自动注入Mapper
.UseExtensions()
.ConfigureServices(sc =>
{
// 通过ConfigureLightweightMapper来配置映射
sc.ConfigureLightweightMapper(options =>
{
//
});
})
.Build();
//实体转换
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
var mapperProvider = host.Services.GetRequiredService<IMapperProvider>();
var mapper = mapperProvider.GetMapper<SourceA, TargetA>();
var targetA = mapper.Convert(sourceA);
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);
var mapperB = host.Services.GetRequiredService<IMapper<SourceA, TargetB>>();
// 只拷贝指定字段之外的属性
var copyProc = mapperB.DefineCopyTo(a =>
new
{
a.A //忽略属性A
});
var targetB2 = new TargetB();
copyProc(sourceA, targetB2);
以上就是ASP.net core扩展库之实体映射使用详解的详细内容,更多关于ASP.net core扩展库之实体映射的资料请关注编程网其它相关文章!
--结束END--
本文标题: ASP.NET Core扩展库之实体映射使用详解
本文链接: https://lsjlt.com/news/121817.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2023-05-21
2023-05-21
2023-05-21
2023-05-21
2023-05-20
2023-05-20
2023-05-20
2023-05-20
2023-05-20
2023-05-20
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0