ASP.NET Core扩展库之实体映射使用详解
程序员文章站
2022-03-24 08:19:34
在分层设计模式中,各层之间的数据通常通过数据传输对象(dto)来进行数据的传递,而大多数情况下,各层数据的定义结构大同小异,如何在这些定义结构中相互转换,之前我们通过使用automapper库,但au...
在分层设计模式中,各层之间的数据通常通过数据传输对象(dto)来进行数据的传递,而大多数情况下,各层数据的定义结构大同小异,如何在这些定义结构中相互转换,之前我们通过使用automapper库,但automapper功能庞大,使用较为复杂,而在很多场景下,可能我们只需要一些基础的对象映射功能,那么此时你可以选择扩展库中的轻量级automapper实现。
实体映射包含以下核心功能:
- 在使用之前无需手动定义类型之间的映射关系
- 采用动态编译、缓存转换委托,提升性能。
- 支持通过特性定义属性映射关系
- 支持插入自定义的转换处理方法
- 支持列表转换
- 支持嵌套类型转换
- 支持循环引用及引用关系维持
- 支持转换模式或拷贝模式
- 支持生成预定义的拷贝委托
- 为了保持其轻量性,目前支持以下转换
值类型转换
数值类型之间的兼容转换(如int-->uint)
支持值类型与其可空类型间的兼容转换
字典类型转换
列表类型转换
枚举类型与string类型间的转换
不支持结构体之间的转换以及结构体与类之间的转换
一、启用
启用轻量级的实体映射,有两种方式:
- 如果你是和扩展库其他功能同时使用,可直接通过useextensions即可
- 如果你需要单独使用,可通过iservicecollection上的addlightweightmapper方法启用
二、配置自定义转换逻辑
你可以通过映射设置上的addconvert来配置对应设置实体转换的后置逻辑,如下所示。
三、使用
你可以通过imapperprovider的getmapper方法或imapper<,>直接获取mapper实例。
- 通过imapperprovider
- 通过imapper<,>
四、通过特性指定属性映射关系
默认映射按照属性名称进行,你也可以通过mapperpropertynameattribute特性进行指定。
mapperpropertynameattribute:
属性名 | 类型 | 说明 |
name | string | 目标或源的名称 |
targettype | type | 映射到的目标类型 |
sourcetype | type | 映射到当前类型的来源类型 |
通过sourcetype或targettype你可以根据需求灵活的在源类型或目标类型上设置映射关系。
五、拷贝
- 实体映射也提供了拷贝方法,通过该方法可以将源实体属性拷贝到目标实体。
通过imapper<,>的copyto方法进行默认拷贝:
- 通过definecopyto方法定义排除字段外的拷贝委托
六、示例
以上示例完整项目,请参考github示例
以上就是asp.net core扩展库之实体映射使用详解的详细内容,更多关于asp.net core扩展库之实体映射的资料请关注其它相关文章!
推荐阅读
-
在 ASP.NET Core 项目中使用 AutoMapper 进行实体映射
-
ASP.NET Core扩展库之Http请求模拟功能的使用
-
ASP.NET Core扩展库之Http通用扩展库的使用详解
-
ASP.NET Core扩展库之日志功能的使用详解
-
ASP.NET Core学习之使用JWT认证授权详解
-
ASP.NET Core扩展库之实体映射使用详解
-
ASP.NET Core Web 应用程序系列(五)- 在ASP.NET Core中使用AutoMapper进行实体映射
-
记录:如何使用ASP.NET Core和EnityFramework Core实现 数据库操作 和 数据库实体 的项目分离
-
PHP7扩展开发之基于函数方式使用lib库的方法详解
-
在 ASP.NET Core 项目中使用 AutoMapper 进行实体映射