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

在分层设计模式中,各层之间的数据凡是通过数据传输工具(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扩展库之实体映射的资料请存眷剧本之家其它相关文章!

您大概感乐趣的文章:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsjfwp.html